一、线性回归(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) |
应用场景 | 回归问题,如房价预测、销量预测等 | 分类问题,如信用违约预测、疾病诊断 |
解决方法 | 最小二乘法或梯度下降 | 梯度下降等优化方法 |
输出解释 | 直接预测一个值 | 预测某个事件发生的概率 |
特征之间的关系 | 假设特征与目标值之间存在线性关系 | 假设特征与分类概率之间有线性关系 |
主要区别总结:
- 问题类型:线性回归用于解决回归问题,预测连续变量,而逻辑回归用于解决分类问题,通常是二分类问题。
- 输出值:线性回归的输出是一个实数,可能范围从负无穷到正无穷;逻辑回归的输出是一个0到1之间的概率值。
- 模型函数:线性回归直接使用线性函数进行预测,而逻辑回归将线性回归的结果通过Sigmoid函数转化为概率。
- 损失函数:线性回归使用均方误差(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}')