6.4-6.7小结


前言

主要是对6.4-6.7内容的主要知识点整理,并归纳了中英文名词对照和根据例题代码做了些填空题,供大家参考。


6.4分类性能评价

6.4.1 混淆矩阵

混淆矩阵(Confusion Matrix),也成为误差矩阵,是用n行n列矩阵形式来表示的表,这张表通过对比已知分类结果的测试数据的预测值和真实值表来描述衡量分类器的性能。在二分类的情况下,混淆矩阵是展示预测值和真实值四种不同结果组合的表,如图:在这里插入图片描述
下面归纳了一下课本上本小节涉及到的分类的各种评估指标中英文名词对照和计算公式:

  1. 混淆矩阵中涉及到的四个名词
    TP – True Positive:实际为阳性,且判断为阳性(正确)
    FN – False Negative:实际为阳性,但判断为阴性(错误)
    TN – True Negative:实际为阴性,且判断为阴性(正确)
    FP – False Positive:实际为阴性,但判断为阳性(错误)
  2. 准确率–Accuracy(ACC)
    预测正确的结果占总样本的百分比,公式:准确率 =(TP+TN)/(TP+TN+FP+FN)
  3. 真阳性率–True Positive Rate(TPR)
    模型判断为阳性且真实也为阳性的例数,除以数据中所有真实为阳性的例数,又称为召回率(recall)、**敏感性(sensitivity)**或检出率,公式:真阳性率=TP/(TP+FN)
  4. 真阴性率–True Negative Rate(TNR)
    模型判断为阴性且真实也为阴性的例数,除以数据中所有真实为阴性的例数,又称为特异性(specificity,SPC)选择性(selectivity),公式:真阴性率=TN/(FP+TN)
  5. 阳性预测值–Positive Predictive Value(PPV)
    所有判断为阳性的数据,其中确实为阳性的例数所占比例,又称精度(precision),公式:PPV=TP/(TP+FP)
  6. 阴性预测值–NegativePredictive Value(NPV)
    所有判断为阴性的数据,其中确实为阴性的例数所占比例,公式:NPV=TN/(TN+FN)
  7. F1 scroe
    公式:F1=2/(1/TPR+1/PPV)

6.4.2 指标权衡


在应用中不能一味追求某个单一指标的最大化,而必须根据实际需求来权衡。

6.4.3 应用举例

对例题代码做了挖空(出现下划线的地方)供大家参考:

#6-4-1(a) 以鸢尾花数据预分析
import pandas as pd
import numpy as np
from sklearn import datasets
from scipy import stats
import matplotlib.______ as plt
iris=datasets.______()  #加载鸢尾花数据
plt.figure(figsize=(12,15))
for n in range(4):
    for m in range(3):
        x=(iris.data[m*50:m*50+50,n]-iris.data[m*50:m*50+50,n].____())/iris.data[m*50:m*50+50,n].____() #标准化处理
        plt.subplot(4,3,n*3+m+1)
        stats.______(x,dist='_____',plot=plt)   #确定是否符合正态分布
        plt.text(-2,2,iris.feature_names[n])
        if n==0:
            plt.title(iris.target_names[m])
        else:
            plt.title('')
        plt.xlim([-2.5,2.5])
        plt.ylim([-2.5,2.5])
        plt.plot([-2.5,2.5],[-2.5,2.5],c='g')
#6-4-1(b) 鸢尾花的高斯贝叶斯模型构建
from sklearn.___________ import train_test_split
from sklearn.naive_bayes import GaussianNB
my_data=iris.data[:,:2]
X_train,X_test,Y_train,Y_test=train_test_split(my_data,iris.target,_________,random_state=0) #指定测试集占全部数据的比例为20%
clf=GaussianNB()
clf.fit(X_train,Y_train)
y_pred=clf.predict(X_test)
Y=pd.DataFrame(np.transpose([Y_test,y_pred]),columns={'true_type','predict_type'})
Y.head(10)
#6-4-1(c) 鸢尾花数据的高斯贝叶斯模型性能评价
from sklearn.metrics import __________    #混淆矩阵
print(__________(Y_test,y_pred))   #混淆矩阵
from sklearn.metrics import classification_report
print(classification_report(Y_test,y_pred))

6.4.4 参数区分性能评价

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
依旧归纳了一下课本上涉及到的中英文名词对照

  1. ROC曲线–接受者操作特征曲线(Receiver Operating Characteristic Curve)
  2. 曲线下面积–AUC(Area Under Curve)

依旧是代码挖空:

#6-4-2 ROC应用举例
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
my_auc=[]
for n in range(4):
    #fpr,tpr,th=_____(iris.target[:100],iris.data[:,n)  #生成绘制ROC曲线所需的tpr、fpr序列
    my_auc.append(______(iris.target[:100],iris.data[:100,n]))  #获得AUC结果
print('4个参数的ROC_AUC是',my_auc)       

6.5 决策树

决策树是一种既能做回归,又能做分类的模型。

6.5.1 决策树工作原理

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

  • 越重要(有利于分类)的特征越靠前
  • 必须条件 – 有标签数据

6.5.2 分类任务决策树的建模过程

分类任务决策树的建模流程

  • 计算数据的纯度;
  • 选择一个候选划分, 计算划分后数据的纯度; 计算划分后数据的纯度;
  • 重复第 2 步, 计算划分后数据的纯度;直至遍历完所有的候选划分;
  • 选择使纯度增加最大的划分作为当前的节点, 计算划分后数据的纯度;分别对分支计算数据纯度;
  • 对剩下的候选划分重复第 2 步开始的过程。

停止准则

  • 达到了设定的最大树深度
  • 所有划分都遍历完
  • 分支下全部数据都属于同一类别

关键 – 纯度衡量

常用纯度衡量参数:基尼系数、信息熵等。这里仅介绍基尼系数:
数据集 D 包含 K 个类别,其基尼系数则定义为:
在这里插入图片描述
其中pk代表第k类在数据集D中出现的概率。

  • 越小,纯度越高,最小值为 0
  • 越大,纯度越低,最大值为(K-1)/K

6.5.3 分类决策树应用举例

依旧是代码挖空:

#例6-5-2 对德国信用数据集利用sklearn库构建决策树实例
import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt

my_data = pd._______("german_credit_data_dataset.csv")#,detype = str) #读取csv文件
print(my_data.info())
print('其中高风险例数为:',(my_data['customer_type']).___()-1000) #计算高风险的例数

from sklearn.model_selection import ________ #划分训练集、测试集
from sklearn.tree import ________ #决策树

feature_col = ['checking_account_status','personal']
X = my_data[['customer_type','credit_amount']]
for n,my_str in enumerate(feature_col):
    my_dummy = pd.______(my_data[[my_str]],prefix = my_str) #one-hot编码
    X = pd.concat([X,my_dummy],axis = 1)
    
XX_feature = ['credit_amount','checking_account_status_A14','personal_A91','personal_A92','personal_A93','personal_A94']
XX = X[XX_feature]
Y = X['customer_type']
X_train,X_test,Y_train,Y_test = ________(XX,Y,test_size = 0.2,random_state = 0) #划分训练集、测试集

my_tree = ________(max_depth = 3)  #决策树
my_tree.___(X_train,Y_train) #训练模型
print('分类结果为:',my_tree.predict(X_test),'\n')
print('平均准确率为:',my_tree.______(X_test,Y_test))  #获取准确率

pd.DataFrame({'feature':XX.columns,'importance':my_tree.____________})  #获得所建模型各个特征在分类任务中的重要性

from sklearn import tree
import matplotlib.pyplot as plt
plt.figure(figsize = (18,12))
tree.plot_tree(my_tree,fontsize = 12,feature_names = XX.columns,
              class_names = ['Good','Bad'])
plt.savefig('my_tree')

6.6 有监督学习模型和无监督学习模型

在这里插入图片描述

  • 典型算法有KNN、线性和逻辑回归、朴素贝叶斯、决策树和随机森林等

在这里插入图片描述

  • K-means是众所周知的无监督聚类机器学习算法

6.7 K-means模型

本节介绍的K-means模型,就属于实现聚类任务的无监督学习模型。

6.7.1 两个基本概念

  1. 簇–cluster
    簇,是指特征空间中相似的数据 / 靠近的点。
  2. 簇中心–centroid
    簇中心,可以被理解为簇中所有点的平均。

6.7.2 K-means迭代算法

在这里插入图片描述
依旧是代码挖空:

#例6-7-1 K-means举例
import numpy as np
import pandas as pd
from scipy import stats 
from matplotlib import pyplot as plt
my_data = pd.read_csv('tmdb_5000_movies.csv')
my_data.describe()

from sklearn._______ import KMeans
X = my_data[['budget','popularity','revenue']]
km = KMeans(n_clusters = 3,random_state = 1)
km.___(X)  #训练模型
my_cl = pd.DataFrame(data = km._______,columns = ['cluster'])  #保存类别标签
X = pd.concat([X,my_cl],axis = 1)
X.head(5)

X._______('cluster').mean()  #分组

x = X['budget']
y = X['popularity']
z = X['revenue']
colors = list()
palette = {0:"red",1:"green",2:"blue"}
for n,row in ________(X['cluster']):  #根据类别为每个样本设置绘图颜色
    colors.append(palette[X['cluster'][n]])

fig = plt.figure(figsize = (12,10))
ax = fig.gca(projection = '3d')
ax.scatter(x,y,z,color = colors)
ax.set_xlim(0,2e8)
ax.set_zlim(0,1e9)
ax.set_xlabel('budget',size = 15)
ax.set_ylabel('popularity',size = 15)
ax.set_zlabel('revenue',size = 15)

总结

以上就是本次我和大家分享的内容,主要是对6.4-6.7小结的一些整理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值