分类算法学习(python)

 

数据集

调用方式:load_xxxx()

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

                   手写数字load_digits()

                   

                    fetch_xxx()

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

                    (较大的数据集)

实例:

#各类信息与房价

from sklearn.datasets import load_boston
boston=load_boston()
print(boston.data.shape)

#鸢尾花数据与分类(有三类)
from sklearn.datasets import load_iris
iris=load_iris()
print(iris.data.shape)
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是什么版本

import sklearn
print(sklearn.__version__)

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

然后去skl上查API

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

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

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

流程:

1.模块导入

import pandas as pd
import numpy as np

from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB

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

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

用这个函数实现

def load_datasets(feature_paths, label_paths):
    feature = np.ndarray(shape=(0, 41))
    label = np.ndarray(shape=(0, 1))
    for file in feature_paths:
        df = pd.read_table(file, delimiter=',', na_values='?', header=None)
        imp = SimpleImputer(missing_values='NaN', strategy='mean', axis=0)
        imp.fit(df)
        df = imp.transform(df)
        feature = np.concatenate((feature, df))

    for file in label_paths:
        df = pd.read_table(file, header=None)
        label = np.concatenate((label, df))

    label = np.ravel(label)
    return feature, label

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

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

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

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

fit()

4.模型预测

predict()

一起展示一下:

from sklearn.neighbors import KNeighborsClassifier

print('Start training knn')
knn = KNeighborsClassifier().fit(x_train, y_train)
print('Training done')


answer_knn = knn.predict(x_test)
print('Prediction done')

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

    print('\n\nThe classification report for knn:')
    print(classification_report(y_test, answer_knn))
    print('\n\nThe classification report for DT:')
    print(classification_report(y_test, answer_dt))
    print('\n\nThe classification report for Bayes:')
    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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值