PYTHON分类

分类简述

分类是一种监督学习算法,根据已知样本的训练集合来识别待测试集中哪一组子集归属哪一类别。
实现分类算法的模块称之为分类器,主要包含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%,计算方式为正确分类的样本数量除以样本总数量,即正确预测的比例。

评估分类器性能的工具

  1. 混淆矩阵
#需要用到的包:from sklearn.metrics import confusion_matrix
#结果中对角线外的是分错了的,这里是4个分错,应该是变色鸢尾,但是分类器分成了维吉尼亚鸢尾
print confusion_matrix(cf.predict(test), t_test)
'''
运行结果:
[[16  0  0]
 [ 0 23  4]
 [ 0  0 17]]
'''
  1. 完整报告
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
'''
  1. 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容