前情提要

线性回归模型解决的预测值是连续值
分类问题的预测值是离散的
让人工智能学习分类是一个复杂的过程,需要优秀的模型、海量的数据和高性能的硬件支持

逻辑斯蒂分类

通过拟合线性函数进行回归分类,为了实现二分类,理想情况是一个单位阶跃函数
image.png
逻辑斯蒂函数的形式如图:image.png
f(x)取值在0~1之间,x无限大时,y趋近于1,x无限小时,y趋近于0
虽然逻辑斯蒂函数是连续的,但却有二分类的特点
对于二分类问题,两个类分别用0和1表示
image.png

二分类逻辑斯蒂分类问题提出与分析

当逻辑斯蒂分类类别数量只有两个时(即y的取值
是0或1),是二分类逻辑斯蒂分类模型
目标是要找到一个最好的边界把两类分开
比如二维角度如果是可分的,可以找到一条斜线,把所有样本无交叉地分割在直线两端,同时保证这条线不是曲线,还是线性组合关系,wx+b

基于sklearn库求解双类别逻辑斯蒂分类

使用Scikit-learn库的LogisticRegression类解决逻辑斯蒂分类问题

from sklearn.linear_model import LogisiticRegression
model=LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, ``fit_intercept=True, intercept_scaling=1, ``class_weight=None, ``random_state=None, solver='liblinear', max_iter=100, ``multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
主要参数:

• penalty:正则化参数,可选值为“L1”和“L2” • solver:优化算法选择参数 • liblinear:使用坐标轴下降法来迭代优化损失函数 • lbfgs:拟牛顿法的一种 • newton-cg:也是牛顿法家族的一种 • sag:随机平均梯度下降 • multi_class:分类方式选择参数 • class_weight:类别权重参数 • fit_intercept:是否存在截距 • max_iter:算法收敛的最大迭代次数

主要属性和方法

  1. 拟合函数fit ( X, y )通过训练数据x和训练数据标签y来拟合模型
  2. 预测函数predict ( X )通过拟合好的模型,对数据x预测y值
  3. 预测概率函数predict_proba(X),
  4. 评价分数值score ( X, y )

    求解步骤

  • 准备训练数据

image.png

  • 创建logisticRegression对象并执行拟合

先导入该类,在创建对象,定义一个优化算法
image.png

  • 执行拟合

调用模型对象的fit()函数,传入xtrain和ytrain作为参数,进行模型拟合,获得拟合的模型参数
image.png

  • 对新数据进行预测

调用模型对象的predict函数,获取类别
image.png

梯度下降法

梯度下降法优化目标

image.png

w是一个d+1维的向量,w0其实是截距b x是一个具有d个特征的样本,1和w0对应

训练数据中有m个样本,y(i)=0表示第i个样本的实际类别为第0类,y(i)=1表示该样本的实际类别为第1类。
•M0为实际类别为0的样本子集,M1为实际类别为1的样本子集
image.png
两类合并后,优化目标为:image.png

左半部分是用实际类别为1的训练样本进行优化,左半部分是用实际类别为0的训练样本进行优化

优化目标一般是进行最小化而不是最大化,L(w)也被称为损失函数(Loss Function)
image.png

梯度计算

梯度下降法需要根据梯度更新参数
更新公式为:image.png
偏导数的求解推导过程:
image.png
输出结果
image.png
在样本数据传入
梯度下降函数进行训练之前先进行归一化操作image.png
训练数据的两个属性分别对应优化参数w1和w2,由于参数向量也包含w0,而w0与1对应,因此为了便于向量运算,在训练数据属性向量中增加一个值为1的量,对应代码中的make_ext()函数。



整个过程:

  1. 问题建模
    • 回归、分类 …
  2. 收集数据
    • 回归:特征数据X,连续数据y

    • 分类:特征数据X,离散数据y

  3. 特征预处理
    • 归一化
    • 类别特征
    • 时间特征
    • 图像数据、序列数据、图结构数据

  4. 构建模型
    • 模型选择:线性回归、Logistic Regression
    • 损失函数:均方误差
  5. 模型验证&参数调优

• 使用训练数据训练模型,使用验证数据进行参数调优
• 验证指标:回归(wmape、R2、均方误差)

  1. 模型上线/AB测试

    • 在测试数据上进行模型测试(测试数据和训练数据来自于同一分布)

    分类模型的评价

    几个评价指标:
    正确率、准确率、召回率、F1分数、ROC曲线

    真阳TP,预测结果是1,真实类别也是1的样本的数量,预测正确 假阳FP,预测结果是1,真实类别为0的样本的数量,预测错误 真阴TN,预测结果是0,真实类别也是0的样本的数量,预测正确 假阴FN,预测结果是0,真实类别是1的样本的数量,预测错误 image.png

image.png
正确率反映了争取的样本数占总样本数的比重
准确率反映了“误报”的程度,准确率越高,误报越小
召回率反映了“漏报”的程度,召回率越高,漏报越小
P是Precision,R是Recall,F1-Score是对准确率和召回率的折中

运行结果说明

测试数据集中共有5个样本,并给出真实y值用于评价;计算预测y值前,先将属性值归一化,再根据分类模型预测y值。
语句“yTest_real_pred = yTestPredicted == yTest”是将预测值与真实值逐项比较,相同则对应的项为1,不相同则对应的项为0,注意正例和负例都进行了比较,此时预测值为[1, 1, 0, 1, 0],真实值为[1, 0, 1, 1, 1]
逻辑斯蒂分类模型计算出来的是概率值,判定时需设定一个阈值K,当概率值大于等于K时判定为正例,小于K时判定为负例

ROC曲线

接受者操作特性曲线(receiver operating characteristic curve, 简称ROC曲线),也叫感受性曲线
横轴:TPR真阳性率image.png
纵轴:FPR假阳性率image.png
反映模型在选取不同阈值K的时候其真阳性率和假阳性率的趋势走向
理想的情况是:TPR越高越好,FPR越低越好
曲线下的面积被称为AUC (Area under curve)
取值范围为0~1
AUC固定阈值,允许中间状态的存在;有助于选择最佳的阈值。ROC曲线越靠近左上角,模型的准确性就越高
image.png

非线性分类问题

更多情况下,样本数据是线性不可分的,通过一个(多个)曲线或曲面才能分割

基于sklearn实现

要使用高阶曲线来区分
image.png
image.png
x1和x2是样本的两个属性,进行多种乘方组合变化,可以得到共28组不同的特征

正则化问题

image.png
为了防止过拟合问题,正则化方法被提出来了
核心思想是:

由于特征数量维度多而造成权重参数也很多, 应尽可能使每个权重参数的值小, 以降低模型复杂度和不稳定程度, 从而避免过拟合的危险。

奥卡姆剃刀定律(Occam’s Razor):如果有多个假设与观察一致,则选最简单的那个
image.png


采用的方法是在成本函数中加入一个惩罚项。
image.png
image.png是惩罚项,即penalty项,是对参数数量和大小的约束
惩罚项是有范式的,以上是二范式项;
也可以根据需要替换成零范式(要么有参数wj,要么没有参数wj)、一范式、三范式
image.png是超参数,用于调整惩罚项的权重

  1. 惩罚项的梯度是image.png
  2. 得到成本函数的梯度:image.png
  3. 该式适用于w0以外的参数wj的更新

    正则化问题的求解实现

    只需要将其中创建模型对象的语句修改成如下语句即可
    model = LogisticRegression ( solver = "newton-cg", penalty = “l2" ) #可选:l1, l3, l4等 等
    由于数据的两个属性值取值范围相同,因此可以省去归一化(normalize)部分

    关于防止过拟合

    过拟合发生的原因:
  • 训练数据集样本单一,样本不足
  • 训练数据中噪声干扰过大
  • 模型过于复杂

常用防止过拟合的方法

使用更多的数据 控制模型复杂度 减少特征的数量 正则化

多类别逻辑斯蒂分类

  • 准备训练数据

image.png

  • 计算特征矩阵用于模型训练

image.png

  • 训练逻辑斯蒂分类模型并评估

    基于sklearn求解多分类

    为了实现多类别逻辑斯蒂分类,logisticRegression类提供了一个属性——multi_class,将这个属性设置为“multinomial”,可自动实现多分类。

    基于梯度下降法求解

    由于原始的逻辑斯蒂回归解决的是二分类的问题,为了解决手写数字识别的多分类问题,可以把多分类问题转化为二分类问题求解

    为每个类别计算一个双类别逻辑斯蒂分类模型,其中该类别为正,其它所有类别为负,得到10个具有不同参数的双类别逻辑斯蒂模型 在预测时,使用这10个模型对每个类别计算得到不同的预测概率,取其中概率最大的类别为预测类别