当前位置:   article > 正文

分类算法学习(python)_python分类算法

python分类算法

 

数据集

调用方式:load_xxxx()

                  鸢尾花数据集150*4 load_iris()

                   手写数字load_digits()

                   

                    fetch_xxx()

                    路透社新闻语料数据集fetch_rev1()

                    (较大的数据集)

实例:

  1. #各类信息与房价
  2. from sklearn.datasets import load_boston
  3. boston=load_boston()
  4. print(boston.data.shape)
  5. #鸢尾花数据与分类(有三类)
  6. from sklearn.datasets import load_iris
  7. iris=load_iris()
  8. print(iris.data.shape)
  9. print(iris.target_names)

(skl库六大部分:分类、回归、聚类、降维、模型选择、数据预处理)

分类模型与对应模块(skl中)

 

(图片来自慕课Python机器学习应用_中国大学MOOC(慕课) (icourse163.org)

有监督分类(输出为离散)

评价标准:

TP正类预测为正类

FN正类预测为负类

TN负类预测为负类

FP负类预测为正类

(猜测:显示的是预报真值与判断结果?

True False Positive Negtive,++那它实际就是正类,^?)

准确率(accuracy):所有预测对的/所有(TP+TN)/(那四个)

精确率P(precision):预测为P的样本中,正确情况TP/(TP+FP)

召回率R(recall):所有正例,预报正确的情况TP/(TP+FN)

(30条消息) Scikit-Learn各算法详细参数速查手册(中文)_ice_martin的博客-CSDN博客

KNN(K近邻分类器)

已有数据与其距离最小的前k个点,看这k个点的类别。

sklearn.neighbors.KNeighborsClassifier

K大小:n_neighbors

K个点对结果影响权重:weights(uniform平均,diatance越近权重越高)

计算临近点的方法:algorithm(ball_tree,kd_tree,brute)

 决策树

树形结构,顺序询问分类点属性决定分类点最终类别

criterion

朴素贝叶斯Nbayes

(30条消息) 分类算法学习(二)——贝叶斯算法的原理及简单实现_爱吃串串的瘦子的博客-CSDN博客_贝叶斯算法

求解在此项出现的条件下各个类别出现的概率,哪个更大 

小规模数据,适合进行多分类(看的时候觉得很奇怪,为什么适合小规模数据,样例少,又有好些特征、情况,比如有好多种C的取值,a1分好多段,算这个的概率可能就只和十来个样例有关,算出来的概率很容易不准。后面看到解释是计算复杂度随着极大团规模的增长呈指数增长)

因版本不同引发的引用报错
教程上一般显示:from sklearn.preprocessing import Imputer
但我的电脑上就报错
改成from sklearn.impute import SimpleImputer就成功了

如何解决?

先看自己的skl是什么版本

  1. import sklearn
  2. print(sklearn.__version__)

得到自己的版本,我是1.1.1。

然后去skl上查API

API Reference — scikit-learn 1.1.2 documentation   (左上角那个粉红框框可以选择版本)

也可以看中文社区:API 参考-scikit-learn中文社区

(愚蠢的我竟然今天才知道这个东西

流程:

1.模块导入

  1. import pandas as pd
  2. import numpy as np
  3. from sklearn.impute import SimpleImputer
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.metrics import classification_report
  6. from sklearn.neighbors import KNeighborsClassifier
  7. from sklearn.tree import DecisionTreeClassifier
  8. from sklearn.naive_bayes import GaussianNB

2.加载数据、数据预处理

(特征文件、标签文件、有时有缺失值要处理等等)

用这个函数实现

  1. def load_datasets(feature_paths, label_paths):
  2. feature = np.ndarray(shape=(0, 41))
  3. label = np.ndarray(shape=(0, 1))
  4. for file in feature_paths:
  5. df = pd.read_table(file, delimiter=',', na_values='?', header=None)
  6. imp = SimpleImputer(missing_values='NaN', strategy='mean', axis=0)
  7. imp.fit(df)
  8. df = imp.transform(df)
  9. feature = np.concatenate((feature, df))
  10. for file in label_paths:
  11. df = pd.read_table(file, header=None)
  12. label = np.concatenate((label, df))
  13. label = np.ravel(label)
  14. return feature, label

看看怎么用这个函数,并且将数据分为测试集和训练集

  1. if __name__ == '__main__':
  2. ''' 数据路径 '''
  3. featurePaths = ['A/A.feature', 'B/B.feature', 'C/C.feature', 'D/D.feature', 'E/E.feature']
  4. labelPaths = ['A/A.label', 'B/B.label', 'C/C.label', 'D/D.label', 'E/E.label']
  5. ''' 读入数据 '''
  6. x_train, y_train = load_datasets(featurePaths[:4], labelPaths[:4])
  7. x_test, y_test = load_datasets(featurePaths[4:], labelPaths[4:])
  8. x_train, x_, y_train, y_ = train_test_split(x_train, y_train, test_size=0.0)

(我觉得它给的后三行,展示了用两种方法切分出测试集和训练集)

3.选好分类器并进行模型训练

fit()

4.模型预测

predict()

一起展示一下:

  1. from sklearn.neighbors import KNeighborsClassifier
  2. print('Start training knn')
  3. knn = KNeighborsClassifier().fit(x_train, y_train)
  4. print('Training done')
  5. answer_knn = knn.predict(x_test)
  6. print('Prediction done')

5.结果分析(准确率召回率等等)

  1. print('\n\nThe classification report for knn:')
  2. print(classification_report(y_test, answer_knn))
  3. print('\n\nThe classification report for DT:')
  4. print(classification_report(y_test, answer_dt))
  5. print('\n\nThe classification report for Bayes:')
  6. print(classification_report(y_test, answer_gnb))

解释if __name__ == '__main__':if __name__ == '__main__': 到底是个啥? - 腾讯云开发者社区-腾讯云 (tencent.com)

解释axis(30条消息) python中axis=0 axis=1的理解_《一夜飘零》的博客-CSDN博客_axis=1 python

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/140876
推荐阅读
相关标签
  

闽ICP备14008679号