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库来实现线性回归模型,以及如何评估模型的性能。希望本文对读者学习线性回归模型有所帮助。