美文网首页
用scikit learn来实现多标签分类

用scikit learn来实现多标签分类

作者: 赤乐君 | 来源:发表于2017-04-09 16:52 被阅读1259次

在网上没找到比较直观的多标签分类例子,于是自己写了一个。起码在入门这个领域的时候能有个直观的认识。scikit learn在多标签分类分类上一个很简单的实现。

数据准备

这次用的是emotion数据集,格式是arff格式。一共是593个instance,共78列。前72列是features,最后的6列为labels。

import arff, numpy as np
dataset = arff.load(open('emotions.arff', 'rb'))
data = np.array(dataset['data'], dtype=np.float) # dtype=np.float保证数据格式,不然后面clf.fit的时候会出错
data.shape
# output
(593, 78)
# extract feature, 提取前72列作为features
data[:, :-6]

# output
array([[ 0.034741,  0.089665,  0.091225, ...,  0.245457,  0.105065,
         0.405399],
       [ 0.081374,  0.272747,  0.085733, ...,  0.343547,  0.276366,
         0.710924],
       [ 0.110545,  0.273567,  0.08441 , ...,  0.188693,  0.045941,
         0.457372],
       ..., 
       [ 0.042903,  0.089283,  0.080263, ...,  0.366192,  0.289227,
         0.66168 ],
       [ 0.038987,  0.05957 ,  0.082053, ...,  0.581526,  0.047156,
         0.774458],
       [ 0.084866,  0.192814,  0.084549, ...,  0.533746,  0.587807,
         1.121553]])

# extract label,提取最后6列作为labels
data[:, -6:]
# output
array([[ 0.,  1.,  1.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  0.,  0.,  1.],
       ..., 
       [ 0.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  0.],
       [ 0.,  1.,  1.,  0.,  0.,  0.]])
# 把数据集划为测试集和训练集
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(data[:, :-6], data[:, -6:], test_size=0.33, random_state=42)
# 分类器使用1对多,SVM用linear kernel
clf1 = OneVsRestClassifier(SVC(kernel='linear'), n_jobs=-1)
# 训练
clf1.fit(X_train, y_train)
# output
OneVsRestClassifier(estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,decision_function_shape=None, degree=3, gamma='auto', kernel='linear', max_iter=-1, probability=False, random_state=None, shrinking=True,tol=0.001, verbose=False),n_jobs=-1)
# 输出预测的标签结果
predict_class = clf1.predict(X_test)
predict_class
# output
array([[0, 1, 1, 0, 0, 0],
       [1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       ..., 
       [0, 0, 1, 1, 1, 0],
       [1, 0, 0, 0, 0, 1],
       [0, 0, 1, 1, 1, 0]])
#准确率,预测的结果和实际的结果
clf1.score(X_test, y_test)
0.27040816326530615

相关文章

网友评论

      本文标题:用scikit learn来实现多标签分类

      本文链接:https://www.haomeiwen.com/subject/ypwdattx.html