线性回归&逻辑回归-笔记

发布于:2024-10-10 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、线性回归(Linear Regression)

1. 定义

线性回归是一种用于回归问题的算法,旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。

2. 模型表示

线性回归模型假设目标变量(输出)和输入变量(特征)之间的关系是线性的,模型可以表示为:

其中:

  • y是目标变量(预测值)。
  • x1​,x2​,…,xn​ 是输入特征。
  • β0​ 是偏置项(截距)。
  • β1,β2,…,βn​ 是特征的系数(权重)。
  • ϵ是误差项。

3. 损失函数

线性回归的目标是最小化均方误差(Mean Squared Error, MSE),其损失函数定义为:

其中,yi 是真实值,y^i是模型预测值。

4. 解决方法

通过**最小二乘法(Ordinary Least Squares, OLS)**或梯度下降等方法,求解模型中的参数(权重和偏置项)。

二、逻辑回归(Logistic Regression)

1. 定义

逻辑回归是一种用于分类问题的算法,尽管名字中有“回归”一词,它本质上是一种分类算法,特别适用于二分类问题(如0/1、是/否、真/假等)。它通过估计事件发生的概率来进行分类。

2. 模型表示

逻辑回归的模型形式与线性回归类似,但它的输出是一个概率值,通过将线性回归结果输入到Sigmoid函数中,得到的值在0到1之间:

 其中,P(y=1∣x)P(y=1 | x)P(y=1∣x) 是类别为1的概率。

  • Sigmoid函数定义为:

 Sigmoid函数将线性回归的结果(可能为任意实数)映射到0和1之间,便于表示概率。

3. 损失函数

逻辑回归使用交叉熵损失(Cross-Entropy Loss),其损失函数为:

 其中:

  • yi是真实的标签(0或1)。
  • y^i是模型的预测概率。

4. 解决方法

逻辑回归的参数可以通过梯度下降等优化算法来求解。

三、线性回归与逻辑回归的区别 

特征 线性回归(Linear Regression) 逻辑回归(Logistic Regression)
类型 回归算法(用于预测连续值) 分类算法(用于预测类别)
目标变量 连续型变量(如价格、温度等) 二分类变量(0/1, 是/否等)
模型输出 实数(可能在正无穷到负无穷之间) 概率(0到1之间)
使用的函数 线性函数 Sigmoid函数
损失函数 均方误差(MSE) 交叉熵损失(Cross-Entropy)
应用场景 回归问题,如房价预测、销量预测等 分类问题,如信用违约预测、疾病诊断
解决方法 最小二乘法或梯度下降 梯度下降等优化方法
输出解释 直接预测一个值 预测某个事件发生的概率
特征之间的关系 假设特征与目标值之间存在线性关系 假设特征与分类概率之间有线性关系

主要区别总结

  1. 问题类型:线性回归用于解决回归问题,预测连续变量,而逻辑回归用于解决分类问题,通常是二分类问题。
  2. 输出值:线性回归的输出是一个实数,可能范围从负无穷到正无穷;逻辑回归的输出是一个0到1之间的概率值。
  3. 模型函数:线性回归直接使用线性函数进行预测,而逻辑回归将线性回归的结果通过Sigmoid函数转化为概率。
  4. 损失函数:线性回归使用均方误差(MSE)作为损失函数,而逻辑回归使用交叉熵损失(Cross-Entropy)。

 四、具体实践:Python代码示例

线性回归

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error

# 加载数据
boston = load_boston()
X = boston.data
y = boston.target

# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')

 逻辑回归

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score

# 加载数据
cancer = load_breast_cancer()
X = cancer.data
y = cancer.target

# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练模型
model = LogisticRegression(max_iter=10000)
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')