博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python大战机器学习——半监督学习
阅读量:7120 次
发布时间:2019-06-28

本文共 3136 字,大约阅读时间需要 10 分钟。

  半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。它是一类可以自动地利用未标记的数据来提升学习性能的算法

1、生成式半监督学习

  优点:方法简单,容易实现。通常在有标记数据极少时,生成式半监督学习方法比其他方法性能更好

  缺点:假设的生成式模型必须与真实数据分布吻合。如果不吻合则可能效果很差。而如何给出与真实数据分布吻合的生成式模型,这就需要对问题领域的充分了解

2、图半监督学习

(1)标记传播算法:

  优点:概念清晰

  缺点:存储开销大,难以直接处理大规模数据;而且对于新的样本加入,需要对原图重构并进行标记传播

(2)迭代式标记传播算法:

  输入:有标记样本集Dl,未标记样本集Du,构图参数δ,折中参数α

  输出:未标记样本的预测结果y

  步骤:

    1)计算W

    2)基于W构造标记传播矩阵S

    3)根据公式初始化F<0>

    4)t=0

    5)迭代,迭代终止条件是F收敛至F*

      F<t+1>=αSF<t>+(1-α)Y

      t=t+1

    6)构造未标记样本的预测结果yi

    7)输出结果y

  LabelPropagation实验代码:

1 import numpy as np 2 import matplotlib.pyplot as plt 3 from sklearn import metrics 4 from sklearn import datasets 5 from sklearn.semi_supervised import LabelPropagation 6  7 def load_data(): 8     digits=datasets.load_digits() 9     rng=np.random.RandomState(0)10     index=np.arange(len(digits.data))11     rng.shuffle(index)12     X=digits.data[index]13     Y=digits.target[index]14     n_labeled_points=int(len(Y)/10)15     unlabeled_index=np.arange(len(Y))[n_labeled_points:]16 17     return X,Y,unlabeled_index18 19 def test_LabelPropagation(*data):20     X,Y,unlabeled_index=data21     Y_train=np.copy(Y)22     Y_train[unlabeled_index]=-123     cls=LabelPropagation(max_iter=100,kernel='rbf',gamma=0.1)24     cls.fit(X,Y_train)25     print("Accuracy:%f"%cls.score(X[unlabeled_index],Y[unlabeled_index]))26 27 X,Y,unlabeled_index=load_data()28 test_LabelPropagation(X,Y,unlabeled_index)
View Code

  实验结果:

可见预测的准确率还是挺高的

  LabelSpreading实验代码:

1 import numpy as np 2 import matplotlib.pyplot as plt 3 from sklearn import metrics 4 from sklearn import datasets 5 from sklearn.semi_supervised import LabelPropagation,LabelSpreading 6  7 def load_data(): 8     digits=datasets.load_digits() 9     rng=np.random.RandomState(0)10     index=np.arange(len(digits.data))11     rng.shuffle(index)12     X=digits.data[index]13     Y=digits.target[index]14     n_labeled_points=int(len(Y)/10)15     unlabeled_index=np.arange(len(Y))[n_labeled_points:]16 17     return X,Y,unlabeled_index18 19 def test_LabelPropagation(*data):20     X,Y,unlabeled_index=data21     Y_train=np.copy(Y)22     Y_train[unlabeled_index]=-123     cls=LabelPropagation(max_iter=100,kernel='rbf',gamma=0.1)24     cls.fit(X,Y_train)25     print("Accuracy:%f"%cls.score(X[unlabeled_index],Y[unlabeled_index]))26 27 def test_LabelSpreading(*data):28     X,Y,unlabeled_index=data29     Y_train=np.copy(Y)30     Y_train[unlabeled_index]=-131     cls=LabelSpreading(max_iter=100,kernel='rbf',gamma=0.1)32     cls.fit(X,Y_train)33     predicted_labels=cls.transduction_[unlabeled_index]34     true_labels=Y[unlabeled_index]35     print("Accuracy:%f"%metrics.accuracy_score(true_labels,predicted_labels))36 37 X,Y,unlabeled_index=load_data()38 #test_LabelPropagation(X,Y,unlabeled_index)39 test_LabelSpreading(X,Y,unlabeled_index)
View Code

  注:LabelSpreading类似于LabelPropagation,但是使用基于normalized graph Laplacian and soft clamping的距离矩阵

  实验结果:

   预测效果也很不错

3、总结

  半监督学习在利用未标记样本后并非必然提升泛化性能,在有些情况下甚至会导致性能下降。对生成式方法,原因通常是模型假设不准确。因此需要依赖充分可靠的领域知识来设计模型。更一般的安全半监督学习仍然是未加解决的难题。安全是指:利用未标记样本后,能确保返回性能至少不差于仅利用有标记样本

 

转载于:https://www.cnblogs.com/acm-jing/p/7582520.html

你可能感兴趣的文章
WEB 自动化测试工具 Selenium 简介及其应用
查看>>
揭密银行系统开发
查看>>
phpstudy apache设置伪静态
查看>>
鼠标悬浮标签显示提示内容
查看>>
使用Cobbler安装多版本操作系统
查看>>
HAProxy负载均衡代理
查看>>
crontab 计划任务
查看>>
db2审计功能db2audit导致的数据库宕机问题处理
查看>>
TSM介绍
查看>>
链表的基本操作
查看>>
如何优雅的处理异常(java)
查看>>
ElasticSearch遇到问题
查看>>
php后台登陆页面代码
查看>>
Java中类的初始化顺序是什么?
查看>>
一个smarty 分页插件
查看>>
[转载] 羽毛球——学打羽毛球 05 正手发后场高远球练习方法
查看>>
是的发生
查看>>
你的文章
查看>>
安装配置mysql-proxy
查看>>
HttpComponents之httpclient基本使用方法
查看>>