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

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实验代码:

 import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn import datasets
from sklearn.semi_supervised import LabelPropagation def load_data():
digits=datasets.load_digits()
rng=np.random.RandomState(0)
index=np.arange(len(digits.data))
rng.shuffle(index)
X=digits.data[index]
Y=digits.target[index]
n_labeled_points=int(len(Y)/10)
unlabeled_index=np.arange(len(Y))[n_labeled_points:] return X,Y,unlabeled_index def test_LabelPropagation(*data):
X,Y,unlabeled_index=data
Y_train=np.copy(Y)
Y_train[unlabeled_index]=-1
cls=LabelPropagation(max_iter=100,kernel='rbf',gamma=0.1)
cls.fit(X,Y_train)
print("Accuracy:%f"%cls.score(X[unlabeled_index],Y[unlabeled_index])) X,Y,unlabeled_index=load_data()
test_LabelPropagation(X,Y,unlabeled_index)

  实验结果:

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

  LabelSpreading实验代码:

 import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn import datasets
from sklearn.semi_supervised import LabelPropagation,LabelSpreading def load_data():
digits=datasets.load_digits()
rng=np.random.RandomState(0)
index=np.arange(len(digits.data))
rng.shuffle(index)
X=digits.data[index]
Y=digits.target[index]
n_labeled_points=int(len(Y)/10)
unlabeled_index=np.arange(len(Y))[n_labeled_points:] return X,Y,unlabeled_index def test_LabelPropagation(*data):
X,Y,unlabeled_index=data
Y_train=np.copy(Y)
Y_train[unlabeled_index]=-1
cls=LabelPropagation(max_iter=100,kernel='rbf',gamma=0.1)
cls.fit(X,Y_train)
print("Accuracy:%f"%cls.score(X[unlabeled_index],Y[unlabeled_index])) def test_LabelSpreading(*data):
X,Y,unlabeled_index=data
Y_train=np.copy(Y)
Y_train[unlabeled_index]=-1
cls=LabelSpreading(max_iter=100,kernel='rbf',gamma=0.1)
cls.fit(X,Y_train)
predicted_labels=cls.transduction_[unlabeled_index]
true_labels=Y[unlabeled_index]
print("Accuracy:%f"%metrics.accuracy_score(true_labels,predicted_labels)) X,Y,unlabeled_index=load_data()
#test_LabelPropagation(X,Y,unlabeled_index)
test_LabelSpreading(X,Y,unlabeled_index)

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

  实验结果:

  预测效果也很不错

3、总结

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

python大战机器学习——半监督学习的更多相关文章

  1. 吴裕雄 python 机器学习——半监督学习LabelSpreading模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import metrics from sklearn import d ...

  2. 吴裕雄 python 机器学习——半监督学习标准迭代式标记传播算法LabelPropagation模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import metrics from sklearn import d ...

  3. python大战机器学习——模型评估、选择与验证

    1.损失函数和风险函数 (1)损失函数:常见的有 0-1损失函数  绝对损失函数  平方损失函数  对数损失函数 (2)风险函数:损失函数的期望      经验风险:模型在数据集T上的平均损失 根据大 ...

  4. python大战机器学习——数据预处理

    数据预处理的常用流程: 1)去除唯一属性 2)处理缺失值 3)属性编码 4)数据标准化.正则化 5)特征选择 6)主成分分析 1.去除唯一属性 如id属性,是唯一属性,直接去除就好 2.处理缺失值 ( ...

  5. python大战机器学习——集成学习

    集成学习是通过构建并结合多个学习器来完成学习任务.其工作流程为: 1)先产生一组“个体学习器”.在分类问题中,个体学习器也称为基类分类器 2)再使用某种策略将它们结合起来. 通常使用一种或者多种已有的 ...

  6. python大战机器学习——人工神经网络

    人工神经网络是有一系列简单的单元相互紧密联系构成的,每个单元有一定数量的实数输入和唯一的实数输出.神经网络的一个重要的用途就是接受和处理传感器产生的复杂的输入并进行自适应性的学习,是一种模式匹配算法, ...

  7. python大战机器学习——支持向量机

    支持向量机(Support Vector Machine,SVM)的基本模型是定义在特征空间上间隔最大的线性分类器.它是一种二类分类模型,当采用了核技巧之后,支持向量机可以用于非线性分类. 1)线性可 ...

  8. python大战机器学习——聚类和EM算法

    注:本文中涉及到的公式一律省略(公式不好敲出来),若想了解公式的具体实现,请参考原著. 1.基本概念 (1)聚类的思想: 将数据集划分为若干个不想交的子集(称为一个簇cluster),每个簇潜在地对应 ...

  9. python大战机器学习——数据降维

    注:因为公式敲起来太麻烦,因此本文中的公式没有呈现出来,想要知道具体的计算公式,请参考原书中内容 降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中 1.主成分分析(PCA) 将n ...

随机推荐

  1. bzoj 2160: 拉拉队排练 回文自动机

    题目: Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助 ...

  2. Linux 下网卡参数配置

    目录 Linux 下网卡参数配置 第一种:修改 interfaces 文件 网卡配置实例 回环参数配置 DHCP方式配置 静态 IP 地址分配 无线网卡配置 March 17, 2015 7:48 P ...

  3. S3C2410中文芯片手册-11.串口

    目录 11 UART Overview Featrues UART Operation Data Transmission Data Reception Auto Flow Control(AFC) ...

  4. Linux keepalived与lvs的深入分析

    一)概述 在本篇文章里,我们会涉及两部份内容,一个是LVS,另一个则是keepalived. 即我们用LVS和keepalived实现了负载均衡及高可用的服务器.   LVS有实现三种IP负载均衡技术 ...

  5. linux命令-yum工具详解

    yum比rpm的优势在于解决依赖关系.可以指定源. [root@wangshaojun ~]# yum list ////列出rpm包资源 网络资源 rrdtool-php.      x86_64 ...

  6. 编写html页面时常见的问题(转)

    编写html页面时常见的问题(一)   说到写页面,肯定有很多人在刚接触编写页面这一块时遇到很多细节和兼容性的问题,那么在这里我总结一些经常遇到的小问题.希望能够帮助学习页面搭建的初学者! 虽然说ie ...

  7. viewstate的基本用法

    转自:http://www.cnblogs.com/ooip/p/4743536.html 在web窗体将控件属性设置为runat=server时,这个控件会被添加一个隐藏属性_ViewState,_ ...

  8. 9、samtool view

    参考:https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy6YnbQPc3cuKbWqIy1k6SBFomuBEhdSpHkUUZED5fr2OTk ...

  9. 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第2课-基于Epoll的采集端程序框架设计

    回顾之前的整个程序架构 把epoll机制应用到这个架构上去 下面主要去分析我们的系统中有没有需要等待的事件,先看看采集子系统 在采集子系统当中,摄像头有数据,摄像头采集到图像数据可以作为一个等待事件. ...

  10. VS2010和VS2015的Dll项目

    最近在使用公司VS2010开发的老的项目时,发现一些问题 公司用VS2010开发了一个项目,生成 GUS_TestIdentity.dll, 放在 C:\Windows\assembly 中 当在另一 ...