机器学习_线性回归最小二乘法求解

叁歲伎倆 2022-12-31 05:18 248阅读 0赞
  1. import sklearn.datasets as data
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import pandas as pd
  5. import matplotlib as mpl
  6. class LinearRegression:
  7. def __init__(self):
  8. pass
  9. def fit(self, X, y):
  10. X = np.asmatrix(X.copy())
  11. y = np.asmatrix(y).reshape(-1, 1)
  12. self.w_ = (X.T * X).I * X.T * y
  13. def predict(self, X):
  14. X = np.asmatrix(X.copy())
  15. result = X * self.w_
  16. return np.array(result).ravel()
  17. if __name__ == '__main__':
  18. boston = data.load_boston()
  19. col_names = np.append(boston.feature_names, 'MEDV')
  20. data = pd.DataFrame(data=np.c_[boston.data, boston.target], columns=col_names)
  21. t = data.sample(len(data), random_state=0)
  22. # 增加一列 但是在最后添加 故不使用
  23. # t['ddd'] = 1
  24. # 往前面增加一列的方法
  25. print(t)
  26. newColumns = t.columns.insert(0, 'intercept')
  27. # 注意必须更新一下,否则会出现添加到最后一列的效果
  28. t = t.reindex(columns=newColumns)
  29. t['intercept'] = 1
  30. # print(t)
  31. train_x = t.iloc[:400, :-1]
  32. train_y = t.iloc[:400, -1].values
  33. test_x = t.iloc[400:, :-1]
  34. test_y = t.iloc[400:, -1].values
  35. print(test_y)
  36. # print(train_x)
  37. Lr = LinearRegression()
  38. Lr.fit(train_x, train_y)
  39. result = Lr.predict(test_x)
  40. # print(result)
  41. # print(np.mean((result - test_y) ** 2))
  42. # print(Lr.w_)
  43. print(result)
  44. print(test_y)
  45. mpl.rcParams['font.family'] = 'SimHei'
  46. mpl.rcParams['axes.unicode_minus'] = False
  47. plt.figure(figsize=(10, 10))
  48. plt.plot(result, "ro-", label='预测值')
  49. plt.plot(test_y, "go-", label='真实值')
  50. plt.title('线性回归预测')
  51. plt.xlabel('样本个数')
  52. plt.ylabel('房价')
  53. plt.legend()
  54. plt.show()

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线性回归乘法

    目录 简单线性回归  最小二乘法  拟合为曲线的方程 -------------------- 实质:就是构造误差方程,求导取0 得到误差最小值,进而得到线形参数