分类简述
分类是一种监督学习算法,根据已知样本的训练集合来识别待测试集中哪一组子集归属哪一类别。
实现分类算法的模块称之为分类器,主要包含2个部分,训练和分类。
训练是从已知样本中提取特征并标注标签类,建立分类器。
分类是利用分类器判断未知类别的数据的类别。
分类主要算法有:
朴素贝叶斯算法,包括高斯贝叶斯算法、伯努利贝叶斯算法
分类器的应用
Sklearn类库包含很多分类器的实现,这里使用高斯朴素贝叶斯来分析鸢尾花数据,包含山鸢尾、变色鸢尾和维吉尼亚鸢尾。首先把字符串数组转型成整型数据:
def get_classification(ft,msample):
t = zeros(len(msample))
t[msample == 'setosa'] = 1
t[msample == 'versicolor'] = 2
t[msample == 'virginica'] = 3
#选取60%的数据作为训练集,剩下的作为测试集
train, test, t_train, t_test = model_selection.train_test_split(ft,t,test_size = 0.4, random_state = 0)
print "train:\n",train, "\ntest:\n",test,"\nt_train:\n" ,t_train,"\nt_test:\n", t_test
cf = GaussianNB()
cf.fit(train,t_train)
print cf.score(test,t_test)
该分类器的精确度为93%,计算方式为正确分类的样本数量除以样本总数量,即正确预测的比例。
评估分类器性能的工具
- 混淆矩阵
#需要用到的包:from sklearn.metrics import confusion_matrix
#结果中对角线外的是分错了的,这里是4个分错,应该是变色鸢尾,但是分类器分成了维吉尼亚鸢尾
print confusion_matrix(cf.predict(test), t_test)
'''
运行结果:
[[16 0 0]
[ 0 23 4]
[ 0 0 17]]
'''
- 完整报告
print classification_report(cf.predict(test), t_test, target_names=['setosa', 'versicolor', 'virginica'])
'''
运行结果:
precision recall f1-score support
setosa 1.00 1.00 1.00 16
versicolor 1.00 0.85 0.92 27
virginica 0.81 1.00 0.89 17
avg / total 0.95 0.93 0.93 60
'''
- Cross Validation评估模型
scores = model_selection.cross_val_score(cf, ft, t, cv=6)
print scores
print mean(scores)
运行结果:
0.933333333333
[ 0.92592593 1. 0.91666667 0.91666667 0.95833333 1. ]
0.952932098765
拓展:
1、文本分类如何应用
2、伯努利贝叶斯算法 2类判别(0,1)
参考:https://en.wikipedia.org/wiki/Statistical_classification
http://python.jobbole.com/81721/
http://www.cnblogs.com/taichu/p/5251332.html
http://www.cnblogs.com/jasonfreak/p/5448462.html