对 BreastCancer 和 wine 数据集进行逻辑回归数据分析

对 BreastCancer 和 wine 数据集进行逻辑回归数据分析

摘要

BreastCancer和wine数据集分别对应单分类和多分类问题。本文主要根据完整的数据分析步骤,使 用 Python 对 数 据 集 进 行 集 合 划 分 、 模 型 训 练 和 预 测 以 及 模 型 评 估 。
目的:熟 悉 理 论 知 识 、pandas/sklearn/matplotlib 等常用库、评估指标计算函数和 ROC 曲线的绘制。本文主要采用逻辑回归模型,对比二分类和多分类问题的异同,以及该模型代码在分类问题中实现的异同。

分类问题理论基础:分类模型评估标准

二分类模型的最终结果可能出现4种情况(一个矩阵)【T/F是对于预测值而言】

预测值 预测值 合计
1 0
实际值 1 True Positive False Negative Actual Positive (TP+FN)
实际值 0 False Positive True Negative Actual Negative (FP+TN)
合计 Predicted Positive (TP+FP) Predicted Negative (FN+TN) P+N

注:TP真正例/FT假正例/FN假负例/TN正负例

评估指标:

  1. errore rate错误率/accuracy精度:
    error rate=(FP+FN)/(P+N),accuracy=1-error rate=(TP+TN)/(P+N)
    精度是计算预测值正确的比例,无论正负例
  2. precision rate查准率(准确率)/recall rate查全率(召回率)
    查准率P=TP/(TP+FP),表示真正例在所有预测正例中的比例,即在预测正例中预测正确的比例
    召回率R=TP/(TP+FN),表示真正例在所有实际正例中的比例,即在实际正例中预测正确的比例
    通常在实际应用中,我们感兴趣的部分占据少数,因此在test集存在类不平衡问题时,准确度的意义不大,因此我们通常更关心召回率,即灵敏度
    P/R通常是矛盾的。平衡点BEP为P=R时的取值,当一个学习器(模型)的BEP更大时,则认为该模型更优。但BEP相对简单,一般更常使用F1。
  3. F1值
    F1=2/(1/R+1/P)=2PR/(P+R),判断模型优劣的值。如果对于P\R重视度不同,我们还可以对F1进行修改加权,F1=(1+a^1)PR/(aP+R),一般默认a=1。
  4. ROC/AUC曲线
    ROC的纵轴为TPR真正例率,横轴为FPR假正例率。TPR=R,FPR=FP/(TN+FP),都是对于实际值来说预测正例的占比。
    如果一个分类器的ROC曲线盖过另一个,则认为优于。如果交叉,则需要比较AUC,即ROC曲线下面积。

参考资料:

分类问题
模式识别系列(六)多分类策略
逻辑回归多分类的Python实现
机器学习系列(七)——分类问题(classification)
sklearn中绘制 ROC 曲线的函数 roc_curve() 解释
python实现二分类和多分类的ROC曲线

完整代码

wine数据集逻辑回归分析

'''wine:二分类问题示例'''
from sklearn.datasets import load_breast_cancer
import pandas as pd

BreastCancer = load_breast_cancer()
# 放入DataFrame中便于查看
#划分分类标签
x=pd.DataFrame(BreastCancer.data,columns=BreastCancer.feature_names)
y= pd.DataFrame(BreastCancer.target,columns=['Class'])
print(x)
print(y)
df = pd.concat([x,y],axis=1)
df.head()
#切片划分训练集和测试集
from sklearn.model_selection import train_test_split
x=df.loc[:,:'worst fractal dimension']
y=df.loc[:,'Class']
x_train, x_test,y_train,y_test= train_test_split(x,y, shuffle=True)
#模型
from sklearn.linear_model import LogisticRegression
model=LogisticRegression(solver='liblinear')
model.fit(x_train,y_train)
model.score(x_test,y_test)'''此函数计算模型评估指标,当y为连续变量时返回R2值,分类变量时返回accuracy'''
#预测结果
pre_ex1=model.predict_proba(x_test)
print('so the probabilities are:\n',pre_ex1)
pre_ex2=model.predict(x_test)
print
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值