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意:在图中,“未标记的样本”并不意味着我们不知道标签(如在半监督学习中),而是样本根本没有 标签。

打印(__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)


暂无数据
推荐帖子
0条评论
0条评论
0条评论