笔记1:机器学习算法(一): 基于逻辑回归的分类预测

笔记1:机器学习算法(一): 基于逻辑回归的分类预测


文章内容为针对天池机器学习训练营提供的实战教程笔记

1.概念辨析

第一篇内容为“基于逻辑回归的分类预测”

1.1 分类预测

在机器学习的术语中,当预测值为连续值时,称为“回归问题”,离散值时为“分类问题”,例如实战教程里以对鸢尾花的分类来进行预测,计算的y的值为离散的几个数字,分别代表不同的鸢尾花种类。

逻辑回归模型广泛用于各个领域,包括机器学习,大多数医学领域和社会科学。例如,最初由Boyd 等人开发的创伤和损伤严重度评分(TRISS)被广泛用于预测受伤患者的死亡率,使用逻辑回归 基于观察到的患者特征(年龄,性别,体重指数,各种血液检查的结果等)分析预测发生特定疾病(例如糖尿病,冠心病)的风险。逻辑回归模型也用于预测在给定的过程中,系统或产品的故障的可能性。还用于市场营销应用程序,例如预测客户购买产品或中止订购的倾向等。在经济学中它可以用来预测一个人选择进入劳动力市场的可能性,而商业应用则可以用来预测房主拖欠抵押贷款的可能性。条件随机字段是逻辑回归到顺序数据的扩展,用于自然语言处理。

1.2 逻辑回归

逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热,但实则这些传统方法由于其独特的优势依然广泛应用于各个领域中。
而对于逻辑回归而且,最为突出的两点就是其模型简单和模型的可解释性强。
逻辑回归模型的优劣势:
优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;
缺点:容易欠拟合,分类精度可能不高

逻辑回归,也称为对数几率回归,是广义线性模型 y = g − 1 ( w T x + b ) y=g^{-1}\left(\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}+b\right) y=g−1(wTx+b) 的推广。

线性回归(linear regression)试图试图学得一个线性模型以尽可能准确的预测实际输出标记,基本形式为: y = w T x + b y=\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}+b y=wTx+b;但当输出标签不是线性变化的时候,将输出标签转换过后再作为线性模型逼近的目标。

此时得到广义线性模型(generalized linear model),可以求取输入空间到输出空间的非线性函数映射。基本形式为: y = g − 1 ( w T x + b ) y=g^{-1}\left(\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}+b\right) y=g−1(wTx+b);
其中单调可微函数 g ( ⋅ ) − 1 g(·)^{-1} g(⋅)−1 称为联系函数,连续且充分光滑。——《机器学习》

为了解决连续的线性函数不适合进行分类的问题,我们引入非线性函数 g : R D → ( 0 , 1 ) g: \mathbb{R}^{D} \to (0,1) g:RD→(0,1) 来预测类别标签的后验概率 p ( y = 1 ∣ x ) = g ( f ( x ; w ) ) p(y=1|\boldsymbol x)=g(f(\boldsymbol{x;w})) p(y=1∣x)=g(f(x;w)),其中 g ( ⋅ ) g(·) g(⋅) 通常称为激活函数(Activation Function),其作用是把线性函数的值域从实数区间“挤压”到了 (0, 1) 之间,可以用来表示概率. 在统计文献中, g ( ⋅ ) g(·) g(⋅) 的 逆函数 g − 1 ( ⋅ ) g^{-1}(·) g−1(⋅) 也称为联系函数(Link Function).——《神经网络和深度学习》

所谓逻辑回归,即对应广义线性模型时,对于给定的 x , y x, y x,y,如何找到参数 w \boldsymbol{w} w 使得用这样的方式,最大程度获得样本数据集 X X X 对应的分类输出 y y y。它对应的输出结果是连续型的数据,为 y y y 分类的概率,通过概率的大小来确定 y y y 的二分类结果。

其中 z z z 为预测值,是实际模型的实值, y y y 为对应的预测结果。只需找一个对数几率函数将分类任务的真实标记 y y y 与线性回归模型的预测值联系起来(将线性函数的结果映射到了 sigmoid 函数中)。对数几率函数是一个 sigmoid 函数:
l o g i ( z ) = 1 1 + e − z logi(z)=\frac{1}{1+e^{-z}} logi(z)=1+e−z1​

笔记1:机器学习算法(一): 基于逻辑回归的分类预测

通过上图我们可以发现 Logistic 函数是单调递增函数,并且在z=0的时候取值为0.5,并且 l o g i ( ⋅ ) logi(\cdot) logi(⋅)函数的取值范围为 ( 0 , 1 ) (0,1) (0,1)。
而回归的基本方程为 z = w 0 + ∑ i N w i x i z=w_0+\sum_i^N w_ix_i z=w0​+∑iN​wi​xi​,
将回归方程写入其中为:
p = p ( y = 1 ∣ x , θ ) = h θ ( x , θ ) = 1 1 + e − ( w 0 + ∑ i N w i x i ) p = p(y=1|x,\theta) = h_\theta(x,\theta)=\frac{1}{1+e^{-(w_0+\sum_i^N w_ix_i)}} p=p(y=1∣x,θ)=hθ​(x,θ)=1+e−(w0​+∑iN​wi​xi​)1​
所以, p ( y = 1 ∣ x , θ ) = h θ ( x , θ ) p(y=1|x,\theta) = h_\theta(x,\theta) p(y=1∣x,θ)=hθ​(x,θ), p ( y = 0 ∣ x , θ ) = 1 − h θ ( x , θ ) p(y=0|x,\theta) = 1-h_\theta(x,\theta) p(y=0∣x,θ)=1−hθ​(x,θ)
逻辑回归从其原理上来说,逻辑回归其实是实现了一个决策边界:对于函数 y = 1 1 + e − z y=\frac{1}{1+e^{-z}} y=1+e−z1​,当 z = > 0 z=>0 z=>0时, y = > 0.5 y=>0.5 y=>0.5,分类为1,当 z < 0 z<0 z<0时, y < 0.5 y<0.5 y<0.5,分类为0,其对应的 y y y值我们可以视为类别1的概率预测值.
对于模型的训练而言:实质上来说就是利用数据求解出对应的模型的特定的 w w w。从而得到一个针对于当前数据的特征逻辑回归模型。
而对于多分类而言,将多个二分类的逻辑回归组合,即可实现多分类。

2.代码解析

2.1 教程中的代码流程

Part1 Demo实践:
Step1:库函数导入
Step2:模型训练
Step3:模型参数查看
Step4:数据和模型可视化
Step5:模型预测

Part2 基于鸢尾花(iris)数据集的逻辑回归分类实践
Step1:库函数导入
Step2:数据读取/载入
Step3:数据信息简单查看
Step4:可视化描述
Step5:利用 逻辑回归模型 在二分类上 进行训练和预测
Step5:利用 逻辑回归模型 在三分类(多分类)上 进行训练和预测

2.2 教程代码知识准备

2.2.1 使用到的第三方库

数据科学库

  • pandas:用于分组、过滤和组合数据,还提供了时间序列功能。
  • numpy:处理大型的多维数组和矩阵
  • scipy:用于解决线性代数、概率论、积分计算等任务

数据可视化库

  • matplotlib:构建各种图表,从直方图和散点图到非笛卡尔坐标图等
  • seaborn:提供了丰富的可视化图库,包括时间序列、联合图和小提琴图等复杂的类型。

2.2.2 使用到的函数

  • info():查看数据的整体信息。
  • head(), tail():进行简单的数据查看,我们可以利用 .head() 头部.tail()尾部。
  • value_counts():利用value_counts函数查看每个类别数量。
  • describe():对于特征进行一些统计描述,包含每列的统计量,个数、平均值、方差、最小值、中位数、最大值等。

2.2.3 使用到的数据集

鸢花数据(iris),该数据集一共包含5个变量,其中4个特征变量,1个目标分类变量。共有150个样本,目标变量为 花的类别 其都属于鸢尾属下的三个亚属,分别是山鸢尾 (Iris-setosa),变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。包含的三种鸢尾花的四个特征,分别是花萼长度(cm)、花萼宽度(cm)、花瓣长度(cm)、花瓣宽度(cm),这些形态特征在过去被用来识别物种。

2.3 实际代码

Part1 Demo实践,比较简单,主要是教大家了解 sklearn.linear_model 中的逻辑回归模型函数 LogisticRegression,并且使用 matplotlib 对最后的结果进行展示,可视化决策边界。

Part2 基于鸢尾花(iris)数据集的逻辑回归分类实践,比较复杂,但是幸好教程中有详尽的注释介绍,这里代码如下:

##  基础函数库
import numpy as np 
import pandas as pd

## 绘图函数库
import matplotlib.pyplot as plt
import seaborn as sns

## 我们利用 sklearn 中自带的 iris 数据作为数据载入,并利用Pandas转化为DataFrame格式
from sklearn.datasets import load_iris
data = load_iris() #得到数据特征
iris_target = data.target #得到数据对应的标签
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #利用Pandas转化为DataFrame格式
## 为了正确评估模型性能,将数据划分为训练集和测试集,并在训练集上训练模型,在测试集上验证模型性能。
from sklearn.model_selection import train_test_split

## 选择其类别为0和1的样本 (不包括类别为2的样本)
iris_features_part = iris_features.iloc[:100]
iris_target_part = iris_target[:100]

## 测试集大小为20%, 80%/20%分
x_train, x_test, y_train, y_test = train_test_split(iris_features_part, iris_target_part, test_size = 0.2, random_state = 2020)

## 从sklearn中导入逻辑回归模型
from sklearn.linear_model import LogisticRegression

## 定义 逻辑回归模型 
clf = LogisticRegression(random_state=0, solver='lbfgs')

# 在训练集上训练逻辑回归模型
clf.fit(x_train, y_train)

## 查看其对应的w
print('the weight of Logistic Regression:',clf.coef_)

## 查看其对应的w0
print('the intercept(w0) of Logistic Regression:',clf.intercept_)
## 在训练集和测试集上分布利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)

from sklearn import metrics

## 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))

## 查看混淆矩阵 (预测值和真实值的各类情况统计矩阵)
confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)

# 利用热力图对于结果进行可视化
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

笔记1:机器学习算法(一): 基于逻辑回归的分类预测

2.4 知识点补充

教程的后面还介绍了利用逻辑回归模型在三分类(多分类)上进行训练和预测的过程,主要原理相同,得到的参数 w 与 b 分别是长度为3的 list,即三个逻辑回归组合起来实现三分类。

  1. train_test_split():不能将全部数据放入模型中训练,防止模型的过拟合,所以对数据集进行切分;
  2. clf.fit():传入数据,在训练集上训练逻辑回归模型;
  3. clf.predict() :利用训练好的模型进行预测,对传入的数据进行预测;
  4. metrics.confusion_matrix():查看混淆矩阵 (预测值和真实值的各类情况统计矩阵)

混淆矩阵是对结果的显示,是对分类模型的一种性能度量。
笔记1:机器学习算法(一): 基于逻辑回归的分类预测

3.总结

“基于逻辑回归的分类预测”分别介绍了逻辑回归的理论概念以及实际代码操作,而且代码由简单到复杂,介绍非常详尽且合理。

就是感觉初学者看起来还是有点吃力,一篇教程为啥不把理论部分放在第一位,图文并茂的了解了要学习的内容,对下面的代码阅读和理解也会更加到位。并且后面的很多内容我觉得可以附上点资料参考了解,名词介绍什么的,例如突然蹦出来的混淆矩阵,让初学者还是好一顿百度来着。

上一篇:gRPC


下一篇:天池机器学习训练营(Lecture1)