Task05 使用sklearn构建完整的分类项目

本文参考链接
https://github.com/datawhalechina/team-learning-data-mining/tree/master/IntegratedLearning

1. 导入数据集

本次使用的是sklearn自带的 IRIS鸢尾花数据集
导包

import numpy as np
import pandas as pd

导入数据集

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
feature = iris.feature_names
data = pd.DataFrame(X,columns=feature)

读取数据

data['target'] = y
data.head()

各个特征的相关解释:

  • sepal length (cm):花萼长度(厘米)
  • sepal width (cm):花萼宽度(厘米)
  • petal length (cm):花瓣长度(厘米)
  • petal width (cm):花瓣宽度(厘米)

2. 选择度量模型性能的指标

度量分类模型的指标和回归的指标不一样。分类问题本身的因变量是离散变量,单单衡量预测值和因变量的相似度行不通。在分类任务中,对于每个类别犯错的代价不尽相同。为了解决这些问题,必须将各种情况分开讨论,然后才能给出评价指标。

  • 真阳性TP:预测值和真实值都为正例;
  • 真阴性TN:预测值与真实值都为正例;
  • 假阳性FP:预测值为正,实际值为负;
  • 假阴性FN:预测值为负,实际值为正。

分类模型的指标:
准确率:分类正确的样本数占总样本的比例,即: 𝐴𝐶𝐶=(𝑇𝑃+𝑇𝑁)/(𝐹𝑃+𝐹𝑁+𝑇𝑃+𝑇𝑁)。
精度:预测为正且分类正确的样本占预测值为正的比例,即: 𝑃𝑅𝐸=𝑇𝑃/(𝑇𝑃+𝐹𝑃)。
召回率:预测为正且分类正确的样本占类别为正的比例,即: 𝑅𝐸𝐶=𝑇𝑃/(𝑇𝑃+𝐹𝑁)。
F1值:综合衡量精度和召回率,即: 𝐹1=2(𝑃𝑅𝐸×𝑅𝐸𝐶)/(𝑃𝑅𝐸+𝑅𝐸𝐶)。
ROC曲线:以假阳率为横轴,真阳率为纵轴画出来的曲线,曲线下方面积越大越好。

在本次小案例中,我们使用ROC曲线作为最终评价指标。

3. 模型训练

3.1 逻辑回归 – logistic regression

from sklearn.linear_model import LogisticRegression
log_iris = LogisticRegression()
log_iris.fit(X,y)
log_iris.score(X,y)

0.96

3.2 线性判别分析

'''
参数:
solver:{'svd','lsqr','eigen'},默认='svd'
solver的使用,可能的值:
'svd':奇异值分解(默认)。不计算协方差矩阵,因此建议将此求解器用于具有大量特征的数据。
'lsqr':最小二乘解,可以与收缩结合使用。
'eigen':特征值分解,可以与收缩结合使用。
'''
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda_iris = LinearDiscriminantAnalysis()
lda_iris.fit(X,y)
lda_iris.score(X,y)

0.98

3.3 朴素贝叶斯

from sklearn.naive_bayes import GaussianNB
NB_iris = GaussianNB()
NB_iris.fit(X, y)
NB_iris.score(X,y)

0.96

3.4 决策树

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
跟决策数相关的2个指标

基尼系数:
在这里插入图片描述
其中K为类别个数, 𝑝̂ 𝑚𝑘代表第m个区域的训练集中第k类所占的比例,当它的取值接近0或者1时,基尼系数会很小。因此基尼系数被视为衡量结点纯度的指标——如果他的取值小,那就意味着某个节点包含的观测值几乎来自同一个类别。

交叉熵:
在这里插入图片描述
如果所有的 𝑝̂ 𝑚𝑘 都接近于0或者1,那么交叉熵就会接近0。因此,和基尼系数一样,如果第m个结点的纯度越高,则交叉熵越小。事实证明,基尼系数和交叉熵在数值上时很接近的。

决策树分类算法的完整步骤
a. 选择最优切分特征j以及该特征上的最优点s:
遍历特征j以及固定j后遍历切分点s,选择使得基尼系数或者交叉熵最小的(j,s)
b. 按照(j,s)分裂特征空间,每个区域内的类别为该区域内样本比例最多的类别。
c. 继续调用步骤1,2直到满足停止条件,就是每个区域的样本数小于等于5。
d. 将特征空间划分为J个不同的区域,生成分类树。

'''
criterion:{“gini”, “entropy”}, default=”gini”
max_depth:树的最大深度。
min_samples_split:拆分内部节点所需的最少样本数
min_samples_leaf :在叶节点处需要的最小样本数。

'''
from sklearn.tree import DecisionTreeClassifier
tree_iris = DecisionTreeClassifier(min_samples_leaf=5)
tree_iris.fit(X,y)
tree_iris.score(X,y)

0.9733333333333334

3.5 支持向量机SVM

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
'''
C:正则化参数。正则化的强度与C成反比。必须严格为正。惩罚是平方的l2惩罚。
kernel:{'linear','poly','rbf','sigmoid','precomputed'},默认='rbf'
degree:多项式和的阶数
gamma:“ rbf”,“ poly”和“ Sigmoid”的内核系数。
shrinking:是否软间隔分类,默认true
'''
svc_iris = make_pipeline(StandardScaler(), SVC(gamma='auto'))
svc_iris.fit(X, y)
svc_iris.score(X,y)

0.9733333333333334

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值