Python线性回归算法【解析解,sklearn机器学习库】

一.概述

  参考博客:https://www.cnblogs.com/yszd/p/8529704.html

二.代码实现【解析解】

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 __author__ = 'zhen'
 5 
 6 # 这里相当于是随机X维度X1,rand是随机均匀分布
 7 X = 2 * np.random.rand(100, 1)
 8 # 人为的设置真实的Y一列,np.random.randn(100, 1)是设置error,randn是标准正太分布
 9 y = 3 + 6 * X + np.random.randn(100, 1)
10 # 整合X0和X1
11 X_b = np.c_[np.ones((100, 1)), X] #combine聚合两数据集
12 # print(X_b)
13 
14 # 常规等式求解theta
15 # invert
16 theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
17 print(theta_best)
18 
19 # 创建测试集里面的X1
20 X_new = np.array([[0], [2]]) 
21 X_new_b = np.c_[(np.ones((2, 1))), X_new]
22 print(X_new_b)
23 y_predict = X_new_b.dot(theta_best)
24 print(y_predict)
25 
26 plt.plot(X_new, y_predict, 'r-')
27 plt.plot(X, y, 'b.')
28 plt.axis([0, 2, 0, 15])
29 plt.show()

三.结果【解析解】

   

  可视化:

  

 

 四.代码实现【sklearn机器学习库】

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from sklearn.linear_model import LinearRegression
 4 
 5 __author__ = 'zhen'
 6 
 7 X = 2 * np.random.rand(100, 1)
 8 y = 3 + 6 * X + np.random.randn(100, 1)
 9 
10 lin_reg = LinearRegression()
11 lin_reg.fit(X, y)
12 print(lin_reg.intercept_, lin_reg.coef_)
13 
14 X_new = np.array([[0], [2]])
15 y_predict = lin_reg.predict(X_new)
16 print(y_predict)
17 
18 # 可视化
19 plt.plot(X_new, y_predict, 'r-')
20 plt.plot(X, y, 'b.')
21 plt.axis([0, 2, 0, 15])
22 plt.show()

五.结果【sklearn机器学习库】

   

 

   可视化:

  

 

 六.总结

  根据图示可以得出结论,使用解析解或者是sklearn机器学习库都可以得到大致的结论,所花费时间和达到的效率都比较类似。但这仅限于一元线性回归,当参数类别增加时,使用解析解会大大增加程序复杂程度和计算耗能,因此建议多使用sklearn库,并根据情况进行参数配置和优化。

posted @ 2018-06-11 15:31  云山之巅  阅读(974)  评论(0编辑  收藏  举报