1、导入第三方库
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np
2、生成数据集
def generateData():
X = []
y = []
for i in range(0, 100):
tem_x = []
tem_x.append(i)
X.append(tem_x)
tem_y = []
tem_y.append(i + 2.128 + np.random.uniform(-15,15))
y.append(tem_y)
plt.scatter(X, y, alpha=0.6)
return X,y
3、计算残差平方
def residual_sum_of_squares(y_true, y_pred):
# 计算残差
residuals = y_true - y_pred
# 计算残差平方
squared_residuals = residuals ** 2
# 计算残差平方和
rss = np.sum(squared_residuals)
return rss
4、训练模型
if __name__ == '__main__':
np.random.seed(0)
X,y = generateData()
print(len(X))
X_train,X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=0)
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_result = regressor.predict(X_test)
plt.plot(X_test, y_result, color='red',alpha=0.6, linewidth=3,
label='Predicted Line')
plt.show()
# 提取模型的斜率和截距
slope = regressor.coef_[0]
intercept = regressor.intercept_
# 输出拟合函数
print(f"拟合函数: y = {slope}x + {intercept}")
# 计算残差平方和
rss = residual_sum_of_squares(y_test, y_result)
print("Residual Sum of Squares:", rss)
5、数据验证
6、模型优缺点
优点
运算速度快。由于算法很简单,而且符合非常简洁的数学原理,不管是建模速度,还是预测速度都
是非常快的。
可解释性强。由于最终我们可以得到一个函数公式,根据计算出的公式系数就可以很明确地知道每
个变量的影响大小。
对线性关系拟合效果好。当然,相比之下,如果数据是非线性关系,那么就不合适了。
缺点
预测的精确度较低。由于获得的模型只是要求最小的损失,而不是对数据良好的拟合,所以精确度略低。
不相关的特征会影响结果。对噪声数据也比较难处理,所以在数据处理阶段需要剔除不相关的特征以及噪声数据。
容易出现过拟合。尤其在数据量较少的情况下,可能出现这种问题。