线性回归和逻辑回归是两种常见的机器学习算法,它们在一些方面相似,但在其他方面则有明显的不同。以下是它们的对比以及您提供的代码示例:
线性回归 (Linear Regression)
线性回归用于预测连续的数值。这种模型假设自变量和因变量之间存在线性关系。
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
#创建数据
X = np.array([[1], [2], [3], [4]])
y = np.array([2, 3, 2.5, 5])
#创建并训练模型
model = LinearRegression()
model.fit(X, y)
#预测
predictions = model.predict(X)
#可视化
plt.scatter(X, y, color=‘blue’)
plt.plot(X, predictions, color=‘red’)
plt.title(‘Linear Regression’)
plt.xlabel(‘X’)
plt.ylabel(‘y’)
plt.show()
逻辑回归 (Logistic Regression)
逻辑回归用于分类问题,特别是二分类问题。它通过将线性回归的输出通过一个逻辑函数映射到0和1之间,以预测概率。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
#加载Iris数据集
X, y = load_iris(return_X_y=True)
y = y[:100] # 只选取前两类花
X = X[:100, :2]
#创建并训练模型
model = LogisticRegression()
model.fit(X, y)
#预测
predictions = model.predict(X)
#可视化
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title(‘Logistic Regression’)
plt.xlabel(‘Feature 1’)
plt.ylabel(‘Feature 2’)
plt.show()
两者对比使用:
目标和用途:
线性回归:预测连续的数值(如房价、温度)。
逻辑回归:分类任务(如邮件是否为垃圾邮件、疾病诊断)。
输出:
线性回归:输出一个连续的值。
逻辑回归:输出一个介于0和1之间的概率值,通常设定一个阈值(如0.5)来确定类别。
函数形式:
线性回归:线性函数。
逻辑回归:通过逻辑函数(Sigmoid函数)将线性回归的结果转换为概率。
评估指标:
线性回归:均方误差(MSE)、R²等。
逻辑回归:准确率、召回率、F1分数、ROC-AUC等。
两者都是监督学习算法,通常需要足够的标注数据来训练模型。尽管逻辑回归在名字上带有“回归”二字,但它主要用于分类任务,而线性回归则专注于回归问题
线性回归和逻辑回归的对比
假设我们有一组数据,其中包含人们的年龄和他们购买某种产品的情况。我们希望根据年龄来预测一个人购买该产品的可能性。
1. 线性回归
线性回归试图找到一个线性关系,即年龄和购买概率之间的直接关系。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#示例数据
X = np.array([[20], [30], [40], [50], [60]]) # 年龄
y = np.array([0.1, 0.2, 0.6, 0.8, 0.9]) # 购买概率
#线性回归模型
lin_reg = LinearRegression()
lin_reg.fit(X, y)
y_pred_lin = lin_reg.predict(X)
#可视化
plt.scatter(X, y, color=‘blue’)
plt.plot(X, y_pred_lin, color=‘red’)
plt.title(‘Linear Regression’)
plt.xlabel(‘Age’)
plt.ylabel(‘Probability of Purchase’)
plt.show()
在这个例子中,线性回归可能不是最佳选择,因为它可能预测超出0到1范围的值,这在概率中是无意义的。
2. 逻辑回归
逻辑回归适用于分类问题。它通过逻辑函数将年龄与购买与否(是/否)的概率联系起来。
代码示例:
from sklearn.linear_model import LogisticRegression
#逻辑回归模型
log_reg = LogisticRegression()
log_reg.fit(X, y > 0.5) # 使用0.5作为购买与否的阈值
y_pred_log = log_reg.predict_proba(X)[:, 1]
#可视化
plt.scatter(X, y, color=‘blue’)
plt.plot(X, y_pred_log, color=‘green’)
plt.title(‘Logistic Regression’)
plt.xlabel(‘Age’)
plt.ylabel(‘Probability of Purchase’)
plt.show()
在逻辑回归模型中,输出的是介于0和1之间的概率值。逻辑回归通过Sigmoid函数将年龄与购买概率关联起来,更适合处理这种类型的二分类问题。
对比总结
线性回归:
适用于连续数值预测。
可能预测超出目标变量实际范围的值。
在上述例子中,可能会预测出负数或大于1的概率值。
逻辑回归:
适用于二分类问题。
预测值限制在0和1之间,适合概率预测。
在上述例子中,提供了购买与否的概率,更符合实际情况。
线性回归的适用场景
当然,让我们通过一个具体的例子来展示线性回归的适用场景。在这个例子中,我们将使用线性回归来预测房屋价格,这是线性回归常见的应用之一。
假设我们有一组数据,包括房屋的面积(平方米)和相应的售价(万元)。我们的目标是根据房屋的面积来预测其售价。
线性回归应用示例 - 房屋价格预测
数据准备和模型训练
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#示例数据:房屋面积与价格
X = np.array([[50], [60], [70], [80], [90]]) # 房屋面积
y = np.array([300, 350, 390, 430, 480]) # 房屋价格
#线性回归模型
lin_reg = LinearRegression()
lin_reg.fit(X, y)
y_pred = lin_reg.predict(X)
#可视化
plt.scatter(X, y, color=‘blue’, label=‘Actual Price’)
plt.plot(X, y_pred, color=‘red’, label=‘Predicted Price’)
plt.title(‘Linear Regression for House Pricing’)
plt.xlabel(‘Area (sqm)’)
plt.ylabel(‘Price (K)’)
plt.legend()
plt.show()
在这个示例中,我们使用线性回归模型来预测房屋售价。根据房屋面积和价格的数据,我们可以训练一个线性回归模型,该模型试图找到面积和价格之间的线性关系。
为什么适合使用线性回归?
房屋价格通常与面积成正比,这意味着随着面积的增加,价格通常也会增加,这是一个线性关系。
线性回归适合用于预测连续的数值,如价格。
在这个场景中,我们不太可能遇到超出实际范围的预测值,这使得线性回归成为一个合适的选择。
通过这个具体的例子,我们可以看到线性回归在处理具有线性关系的连续数值预测问题时的有效性和适用性。在实际应用中,除了面积,还可以考虑其他特征(如房龄、位置、楼层等)来进一步提升模型的预测准确性。