黑马程序员——三天快速入门python机器学习(六)

分类算法——逻辑回归与二分类

逻辑回归应用场景

  • 广告点击率:是否会被点击
  • 是否为垃圾邮件
  • 是否患病
  • 是否为金融诈骗
  • 是否为虚假账号
    以上例子特点:属于两个类别之间的判断,逻辑回归就是解决二分类的利器。

逻辑回归原理

  1. 输入:逻辑回归输入的就是一个线性回归的结果。
    在这里插入图片描述
  2. 激活函数
  • sigmoid 函数
    在这里插入图片描述
  • 分析
    1)回归的结果输入到sigmoid函数中。
    2)输出结果为[0,1]之间的一个概率值,默认0.5为阈值,大于0.5认为属于这个类别,反之 。

在这里插入图片描述
3. 损失及优化

逻辑回归的损失,称之为对数似然损失,公式如下

  • 分开类别:
    在这里插入图片描述
  • 综合完整损失函数
    在这里插入图片描述

优化:同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率

逻辑回归API

sklearn.linear_model.LogisticRefression(solver=‘liblinear’, penalty='l2, C=1.0)

  • penalty:正则化种类
  • C:正则化力度
  • solver:优化求解方式(默认开源的liblinear库实现)

LogisticRegression方法相当于SGDCIassifier(loss=“log”, penalty=" "), SGDClassifier实现了一个普通的随机梯度下降学习也支持平均随机梯度下降法(ASGD),可以通过设置average=True。而使用LogisticRegression(实现了SAG)

案例 :癌症分类:良/恶性乳腺癌肿瘤预测

  1. 数据介绍
    在这里插入图片描述
  2. 流程分析

1)获取数据:读取的时候加上names
2)数据处理:处理缺失值
3)数据集划分
4)特征工程:无量纲化处理—标准化
5)逻辑回归预估器
6)模型评估

  1. 程序实现
import pandas as pd
import numpy as np

# 1、读取数据
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
               'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
                'Normal Nucleoli', 'Mitoses', 'Class']

data = pd.read_csv(path, names=column_name) 

# 2、缺失值处理
# 1)缺失值替换成np.nan
data = data.replace(to_replace="?", value=np.nan)
# 2)删除缺失样本
data.dropna(inplace=True)  
# 3)检查是否还存在缺失值(可省略)
# data.dropna(inplace=True)

# 3、划分数据集
from sklearn.model_selection import train_test_split

# 筛选特征值和目标值
x = data.iloc[:, 1:-1]
y = data["Class"]

x_train, x_test, y_train, y_test = train_test_split(x, y)

# 4、标准化
from sklearn.preprocessing import StandardScaler

transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

from sklearn.linear_model import LogisticRegression

# 5、预估器流程
estimator = LogisticRegression()
estimator.fit(x_train, y_train)

# 逻辑回归的模型参数:回归系数和偏置
estimator.coef_   # 权重

estimator.intercept_  # 偏置

# 6、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)

# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)

运行结果

y_predict:
 [2 2 4 4 2 2 2 4 2 4 2 4 2 4 4 4 2 4 2 2 4 2 2 2 4 2 2 2 2 2 2 2 4 2 2 2 4
 2 4 4 4 2 4 2 2 2 2 2 2 4 2 4 4 2 2 2 2 2 4 2 2 4 2 4 2 4 2 2 2 2 2 4 2 4
 2 4 4 2 2 4 4 2 2 2 2 2 2 2 2 2 2 4 2 2 4 2 4 2 2 4 4 2 2 2 2 2 2 2 2 2 2
 4 4 2 2 2 2 2 2 4 2 2 2 2 2 2 2 4 4 2 2 2 2 4 4 2 2 2 2 4 4 2 4 2 2 2 2 2
 2 4 2 4 2 2 2 2 2 2 4 4 2 4 2 4 4 2 4 2 4 4 2]
直接比对真实值和预测值:
 195    True
384    True
658    True
251    True
471    True
       ... 
85     True
660    True
53     True
126    True
192    True
Name: Class, Length: 171, dtype: bool
准确率为:
 0.9590643274853801

分类的评估方法

  1. 混淆矩阵

在分类任务下,预测结果和正确标记之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
在这里插入图片描述

  1. 精确率与召回率
  • 精确率(查准率):预测结果为正例样本中真实为样本的比例。
  • 召回率(查全率):真实结果为正例的样本中预测结果为正例的比例。
  • 其他评估标准:F1-score,反映了模型的稳健性。
    在这里插入图片描述
  1. 分类评估报告API
    sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None)
  • y_true:真实目标值
  • y_pred:估计器预测目标值
  • labels:指定类别对应的数字
  • target_names:目标类别名称
  • return:每个类别精确率与召回率
# 查看精确率、召回率、F1-score
from sklearn.metrics import classification_report
report = classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"])

在这里插入图片描述

ROC曲线与AUC指标

衡量样本不均衡下的评估

  1. TPR 与FPR
  • TPR=TP/(TP+FN) (召回率)
  • FPR=FP/(FP+TN) 所有真实类别为0的样本中,预测类别为1的比例
  1. ROC曲线
    在这里插入图片描述
  2. AUC指标
  • AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率
  • AUC的最小值为05,最大值为1,取值越高越好
  • AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。最终AUC的范围在[051]之间,并且越接近1越好。
  1. AUC计算API
    from sklearn.metrics import roc_auc_score
  • sklearn.metrics.roc_auc_score(y_true, y_score)
    计算ROC曲线面积,及AUC值
    y_true:每个样本的真实类别,必须为0(反例)和1(正例)
    y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值
# y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
# 将y_test 转换成 0 1
y_true = np.where(y_test > 3, 1, 0)

from sklearn.metrics import roc_auc_score
roc_auc_score(y_true, y_predict)`在这里插入代码片`

运行结果
在这里插入图片描述

  1. 总结
  • AUC只能用来评价二分类
  • AUC非常适合评价样本在不均衡中的分类器性能

模型保存和加载

sklearn模型保存和加载API

import joblid

  • 保存: joblib.dump(rf,‘test.pkl’)
  • 加载:estimator=joblib.load(‘test.pkl’)

案例

  1. 保存模型
    在这里插入图片描述
  2. 加载模型
    在这里插入图片描述

无监督学习——K-means算法

无监督学习

  1. 没有目标值
  2. 无监督学习包含算法
    聚类:K-means
    降维:PCA

K-means原理

在这里插入图片描述

1)随机设置K个特征空间内的点作为初始的聚类中心
2)对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点
作为标记类别
3)接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
4)如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程
在这里插入图片描述

K-means API

sklearn.cluster.KMeans(n_cluster=8, init=‘k-means++’)

  • n_clusters:开始聚类中心数量
  • init:初始化方法,默认为‘k-means++’
  • labels_:默认标记的类型,可以和真实值比较(不是值比较)

案例:K-means对Instacart Market 用户聚类

之前学的主成分分析中的instacart 降维案例

  1. 分析
    1)降维之后的数据
    2)预估器流程:k-means聚类
    3)聚类结果显示
    4)模型评估
from sklearn.cluster import KMeans
estimator = KMeans(n_clusters=3)
estimator.fit(data_new)
y_predict = estimator.predict(data_new)

在这里插入图片描述

聚类的模型评估

1.轮廓系数
在这里插入图片描述

  1. 轮廓系数值分析

在这里插入图片描述

  • 结论
    1)b_i>>a_i:轮廓系数趋近于1效果越好;b_i<<a_i:趋近于-1,效果不好。
    2)轮廓系数的值是介于[-1,1],越趋近于1代表内聚度和分离度都相对较优。
  1. 轮廓系数API
    sklearn.metrics.silhouette_score(X, labels)
  • 计算所有样本的平均轮廓系数
  • X:特征值
  • labels:被聚类标记的目标值
    在这里插入图片描述

K-means总结

  • 特点分析:采用迭代式算法,直观易懂并且非常实用
  • 缺点:容易收敛到局部最优解(多次聚类)
  • 应用场景:没有目标值

注意:聚类一般做在分类之前

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
作者介绍 Toby,持牌照金融公司担任模型验证专家,国内最大医药数据中心数据挖掘部门负责人!和重庆儿科医院,中科院教授,赛柏蓝保持慢病数据挖掘项目合作!管理过欧美日中印巴西等国外药典数据库,马丁代尔数据库,FDA溶解度数据库,临床试验数据库,WHO药物预警等数据库。课程概述 此课程讲述如何运用pythonsklearn快速建立机器学习模型。课程结合美国威斯康辛乳腺癌细胞临床数据,实操演练,建立癌细胞预测分类器。课程讲述十大经典机器学习算法:逻辑回归,支持向量,KNN,神经网络,随机森林,xgboost,lightGBM,catboost。这些算法模型可以应用于各个领域数据。本视频系列通俗易懂,课程针对学生和科研机构,python爱好者。本视频教程系列有完整python代码,观众看后可以下载实际操作。了解癌症肿瘤基本常识,建立健康生活方式,预防癌症,减轻癌症治疗成本。课程背景 警钟长鸣!癌症离我们远吗?《我不是药神》催人泪下,笔者在此揭露真相,癌症不是小概率疾病,癌症就在身边。癌症早期发现和控制可极大延长寿命和减少治疗费用。笔者下载美国威斯康辛临床数据,运用python sklearn建立乳腺癌分类器模型,可预测正常细胞和癌细胞。我国医院重视治疗,但忽略疾病预防教育。通过我多年机器学习数据挖掘,我发现疾病可防可控,通过自身努力,我们可以提前发现疾病早期症状或扼杀疾病于摇篮。希望此课程让广大医疗科研工作者认识疾病预防教育重要性。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛不必达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值