热线电话:13121318867

登录
2018-12-09 阅读量: 970
多标签分类

此示例模拟多标签文档分类问题。数据集是基于以下过程随机生成的:

  • 选择标签数量:n~泊松(n_labels)
  • n次,选择一个类c:c~Multinomial(theta)
  • 挑选文件长度:k~泊松(长度)
  • k次,选一个词:w~Multinomial(theta_c)

在上述过程中,拒绝采样用于确保n大于2,并且文档长度从不为零。同样,我们拒绝已经选择的类。分配给两个类的文档被两个彩色圆圈包围。

通过投影到PCA和CCA找到的前两个主要组件以进行可视化目的,然后使用sklearn.multiclass.OneVsRestClassifier具有线性内核的两个SVC 的元分类器来学习每个类的判别模型来执行分类。请注意,PCA用于执行无监督降维,而CCA用于执行监督降维。

注3意:在图中,“未标记的样本”并不意味着我们不知道标签(如在半监督学习中),而是样本根本没有 标签。

../_images/sphx_glr_plot_multilabel_001.png
打印(__doc__ )

import numpy as np
import matplotlib.pyplot as plt

#从 sklearn.datasets 进口 make_multilabel_classification
#从 sklearn.multiclass 进口 OneVsRestClassifier
#从 sklearn.svm 进口 SVC
#从 sklearn.decomposition 进口 PCA
#从 sklearn.cross_decomposition 进口 CCA


#高清 plot_hyperplane (CLF , MIN_X , MAX_X , 线型, 标签):
#得到分离超
w ^ = CLF 。coef_ [ 0 ]
a = - w [ 0 ] / w [ 1 ]
xx = np 。linspace(min_x - 5 , max_x + 5 ) #确保该行足够长
yy = a * XX - (CLF 。intercept_ [ 0 ]) / 瓦特[ 1 ]
PLT 。plot(xx , yy , linestyle , label = label )


DEF plot_subfigure (X , ÿ , 副区, 标题, 变换):
如果 变换 == “PCA” :
X = PCA(n_components = 2 )。fit_transform (X )
elif transform == “cca” :
X = CCA(n_components = 2 )。适合(X , Y )。转变(X )
else :
引发 ValueError

min_x = np 。min (X [:, 0 ])
max_x = np 。max (X [:, 0 ])

min_y = np 。min (X [:, 1 ])
max_y = np 。max (X [:, 1 ])

classif = OneVsRestClassifier(SVC(kernel = 'linear' ))
classif 。适合(X , Y )

plt 。副区(2 , 2 , 副区)
PLT 。标题(标题)

zero_class = np 。其中(Y [:, 0 ])
one_class = np 。其中(Y [:, 1 ])
plt 。散射(X [:, 0 ], X [:, 1 ], 小号= 40 , c ^ = '灰色' , edgecolors = (0 , 0 , 0 ))
PLT 。散射(X [zero_class , 0 ], X [ zero_class , 1 ], s = 160 , edgecolors = 'b' ,
facecolors = 'none' , linewidths = 2 , label = 'Class 1' )
plt 。scatter(X [ one_class , 0 ], X [ one_class , 1 ], s = 80 , edgecolors = 'orange',
facecolors = 'none' , linewidths = 2 , label = 'Class 2' )

plot_hyperplane (classif 。estimators_ [ 0 ], MIN_X , MAX_X , 'K--' ,
'边界\ n 为类1' )
plot_hyperplane (classif 。estimators_ [ 1 ], MIN_X , MAX_X , '的k' ,
“边界\ n 为2级' )
plt 。xticks(())
plt 。yticks(())

plt 。XLIM(MIN_X - 。5 * MAX_X , MAX_X + 。5 * MAX_X )
PLT 。ylim(MIN_Y - 。5 * MAX_Y , MAX_Y + 。5 * MAX_Y )
#如果 副区 == 2 :
PLT 。xlabel('第一主成分' )
plt 。ylabel('第二主要成分' )
plt 。传奇(loc = “左上角” )


plt 。图(figsize = (8 , 6 ))

X , Y = make_multilabel_classification(n_classes = 2 , n_labels = 1 ,
allow_unlabeled = True ,
random_state = 1 )

plot_subfigure (X , Y , 1 , “带有未标记的样本+ CCA” , “cca” )
plot_subfigure (X , Y , 2 , “带有未标记的样本+ PCA” , “pca” )

X , Y = make_multilabel_classification(n_classes = 2 , n_labels = 1 ,
allow_unlabeled = False ,
random_state = 1 )

plot_subfigure (X , Y , 3 , “没有未标记的样本+ CCA” , “cca” )
plot_subfigure (X , Y , 4 , “没有未标记的样本+ PCA” , “pca” )

plt 。subplots_adjust(。04 , 。02 , 。97 , 。94 , 。09 , 。2 )
PLT 。show()
0.0000
4
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子