如何用Python徒手写线性回归

1. 什么是线性回归?

线性回归是一种使用线性函数进行预测的机器学习算法。它在统计学和机器学习领域被广泛应用。在线性回归中,我们试图找到一个最适合数据的线性方程,这个方程可以将自变量和因变量之间的关系用一条直线来描述。

1.1 线性回归的公式

在线性回归中,我们希望找到一条最适合数据的直线,可以用以下公式表示:

y = a * x + b

其中,y表示因变量,x表示自变量,a表示斜率,b表示截距。

1.2 线性回归的应用场景

线性回归广泛用于预测、分类和建模等领域。如股票收盘价的预测、销售额的预测、房价的预测等。线性回归是机器学习中最基础、最常用、最简单的模型之一。

2. 如何用Python徒手写线性回归?

在Python中,我们可以使用NumPy和matplotlib这两个库来生成数据和绘制图表,并使用scikit-learn来拟合线性回归模型。

2.1 生成数据

在本例中,我们将使用NumPy库中的random模块来生成一些随机数据。这里生成的数据是一些关于x和y之间的线性关系。

import numpy as np

np.random.seed(0)

X = np.linspace(0, 10, 100)

y = 2*X + 1 + np.random.randn(100)*0.6

这里,我们使用了np.random.seed()函数来使每次运行程序时产生的随机数据相同,方便后面的调试。然后使用np.linspace()函数来生成0到10之间的100个数据点,用作自变量X。接着,生成因变量y的数据,在这里我们生成了一些随机的高斯噪声,用来破坏X和y的标准线性关系,使实际的模型更贴近真实数据。

2.2 绘制数据

在生成数据之后,我们可以使用matplotlib库中的pyplot模块来可视化这些数据。

import matplotlib.pyplot as plt

plt.scatter(X, y)

plt.xlabel('X')

plt.ylabel('y')

plt.show()

这里,我们使用plt.scatter()函数将X和y之间的关系绘制成散点图。使用plt.xlabel()和plt.ylabel()函数来设置坐标轴的标签。最后使用plt.show()函数显示出图形。

2.3 拟合线性回归模型

接下来,我们需要使用scikit-learn库来拟合线性回归模型。首先,我们需要将数据集分成训练集和测试集。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

在这里,我们使用了train_test_split()函数将数据集分成训练集和测试集,test_size表示测试集的比例,random_state用于随机生成拆分。

接下来,我们使用scikit-learn库中的LinearRegression类来拟合线性回归模型。

from sklearn.linear_model import LinearRegression

lr = LinearRegression()

lr.fit(X_train.reshape(-1, 1), y_train.reshape(-1, 1))

在这里,我们实例化了一个LinearRegression对象lr,并使用fit()方法将模型拟合到训练数据上。需要注意的是,我们需要将X_train和y_train转换为列向量,即reshape(-1, 1)。

2.4 可视化拟合结果

在拟合模型之后,我们可以使用matplotlib绘制模型和数据之间的关系图。下面是绘制拟合结果的完整代码:

plt.scatter(X_train, y_train, color='blue')

plt.plot(X_train, lr.predict(X_train.reshape(-1, 1)), color='red')

plt.xlabel('X')

plt.ylabel('y')

plt.title('Linear Regression')

plt.show()

这里,我们使用plt.scatter()函数将训练数据绘制成散点图。然后,使用plt.plot()函数将拟合的直线绘制出来。接着,我们使用plt.xlabel()、plt.ylabel()和plt.title()函数来设置坐标轴标签和标题。最后使用plt.show()函数显示图形。

2.5 计算模型评估指标

在拟合模型之后,我们需要使用测试数据计算模型评估指标来评估模型的性能。在本例中,我们可以使用scikit-learn库中的r2_score()函数来计算R平方。

from sklearn.metrics import r2_score

print('R2 Score:', r2_score(y_test, lr.predict(X_test.reshape(-1, 1))))

在这里,我们使用r2_score()函数计算测试集上的R平方值。R平方值越接近1,模型性能越好。

3. 总结

Python提供了多种机器学习和数据挖掘工具和库,使用它们可以轻松地应用各种神经网络、机器学习和数据挖掘技术。在本文中,我们介绍了如何使用Python中的NumPy、matplotlib和scikit-learn库来实现线性回归模型,以及如何评估模型的性能。希望本文对读者学习线性回归模型有所帮助。

后端开发标签