人工智能入门——机器学习小案例(四)

1、逻辑回归模型预测并实现模型评估

  1. 逻辑回归模型
    概念:用于解决分类问题的一种模型。根据数据特征或属性,计算其归属于某一类别的概率P(x),根据概率数值判断其所属类别。主要的应用场景:二分类问题。
    数学表达式
    P(x)=1/(1+e^-(ax+b))
  2. 皮马印第安人糖尿病数据集
    简介:基于数据集中包括的某些诊断测量来诊断性地预测患者是否患有糖尿病。
    输入变量:患者的患孕次数,葡萄糖量,血压,皮褶厚度,体重指数,胰岛素水平,糖尿病浦西功能,年龄
    输出结果:是否患有糖尿病
    数据来源:www.kaggel.com/ucim/pima-indians-diabetes-dataset
  3. 使用准确率进行模型评估的局限性
    局限性:无法真实的反映模型针对各个分类的预测准确度,准确率可以方便的用于衡量模型的整体预测效果,但是没有办法反映细节信息,具体表现在:没有体现数据的实际分布情况,没有体现模型的错误预测的类型
  4. 混淆矩阵、模型衡量指标及其意义
    混淆矩阵
    概念:混淆矩阵,又称为误差矩阵,用于衡量分类算法的准确程度
    True Positions(TP):预测准确、实际为正样本的数量(实际为1,预测为1)
    True Negatives(TN):预测准确、实际为负样本的数量(实际为0,预测为0)
    False Positon(FP):预测错误、实际为负样本的数量(实际为0,预测为1)
    False Nagatice(FN):预测错误、实际为正样本的数量(实际为1,预测为0)
    混淆举证指标特点
    ① 分类任务中,相比单一的预测准确率,混淆矩阵提供了更全面的模型评估信息
    ② 通过混淆矩阵,我们可以计算出多样的模型表现均衡指标
    哪个衡量指标更关键?
    ① 衡量指标的选择取决于应用场景
    垃圾邮件检测(正样本为垃圾邮件):希望普通邮件(负样本)不要被判断为垃圾邮件(正样本),需要关注精确率,希望判断为垃圾邮件的样本都是判断正确的,还需要关注召回率,希望所有的垃圾邮件尽可能的被判断出来
    异常交易检测(正样本为"异常交易"):希望所有的异常交以都被检测到,即判断为正常的交易中尽可能不存在异常交易,需关注特异度

2、模型评估:逻辑回归、混淆矩阵、召回率、F1分数实操训练

  1. 在Anaconda安装Pandas
    Pandas中文网网址
    指令:conda install pandas
  2. 引入pandas和数据集
import pandas as pd
path = 'D:\Python\皮马印第安人糖尿病数据集\pima-indians-diabetes-master\pima-indians-diabetes.csv'
pima = pd.read_csv(path)
# 展示pima数据的抬头及部分数据
pima.head()

结果:
pima数据的抬头及部分数据

  1. 对x、y进行赋值并且进行维度确认
# x、y的赋值
feature_name = ['pregnants','serum_insulin','BMI','Age']
x = pima[feature_name]
y = pima.Target
# 维度确认
print(x.shape)
print(y.shape)

结果:
维度确认

  1. 数据分离并进行模型训练,对测试数据集进行结果预测并对结果进行保存,先通过准确率对模型进行评估
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=0)
# 模型训练
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(x_train,y_train)
# 基于测试数据集进行结果预测
y_pred = logreg.predict(x_test)
# 使用准确率进行评估
from sklearn import metrics
print(metrics.accuracy_score(y_test,y_pred))

结果:
使用准确率进行评估

  1. 对样本中正负样本数量进行展示,查看1的比例、0的比例以及空准确率
# 确认正负样本数据量
y_test.value_counts()

结果:
正负样本数据量

# 1的比例
y_test.mean()
# 0的比例
1-y_test.mean()
# 空准确率
max(y_test.mean(),1-y_test.mean())

结果:
1的比例0的比例
空准确率

  1. 计算并展示混淆矩阵,输出部分结果进行对比
# 计算并展示混淆矩阵
print(metrics.confusion_matrix(y_test,y_pred))
# 展示部分实际结果(25组)
print("true",y_test.values[0:25])
print("pred",y_pred[0:25])

结果:
混淆矩阵
结果对比

  1. 计算TN、FP、FN、TP指标,并计算准确率、错误率、灵敏度、特异度、精确率以及F1分数
confusion = metrics.confusion_matrix(y_test,y_pred)
TN = confusion[0,0]
FP = confusion[0,1]
FN = confusion[1,0]
TP = confusion[1,1]
print(TN,FP,FN,TP)

# 准确率
accuracy = (TP+TN)/(TP + TN + FN + FP)
print(accuracy)
print(metrics.accuracy_score(y_test,y_pred))

# 错误率
mis_rate = (FP + FN)/(TP + TN + FN + FP)
print(mis_rate)
print(1-metrics.accuracy_score(y_test,y_pred))

# 灵敏度
recall = TP/(TP + FN)
print(recall)

# 特异度
specifucity = TN/(TN + FP)
print(specifucity)

# 精确率
precision = TP/(TP + FP)
print(precision)

# F1分数
f1_score = 2*precision*recall/(precision+recall)
print(f1_score)

结果(只展示F1分数):
F1分数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值