import matplotlib.pyplot as plt #绘图库
import numpy as np #科学计数库
from sklearn.linear_model import LinearRegression #导入回归库
#产生仿真数据
#设定直线(y=k*x+b)
k = 1
b = 5
#产生实验数据
N = 50 #数据量
X = np.linspace(0, 10, 50)
Y = k * X + b
mu = 0 #期望
sigma = 2#标准差
rand_data = np.random.normal(mu, sigma, len(X))#产生正态分布随机数
#产生带噪数据(Y值)
noisy_Y = Y + rand_data
#fit_intercept: 是否需要拟合截距项W0
#copy_X: 是否需要拷贝
#n_jobs:需要多少个processor(处理器)来完成拟合,减少运算时间(None(一般)/ -1)
#positive:拟合的系数是否限制为正数,一般来说我们都使用 False 选项。
L_model = LinearRegression(fit_intercept=True,copy_X=True,n_jobs=None,positive=False)#构造模型
#将X转化为二维矩阵
L_model.fit(X.reshape(-1, 1),noisy_Y)#训练模型
k = L_model.coef_[0]
b = L_model.intercept_
#显示结果
fitted_Y = k * X + b
plt.figure()
plt.xlabel('X');plt.ylabel('Y')
plt.plot(X, noisy_Y, color='red', linewidth=2.5, linestyle='None', marker='o', label='Noisy Points')
plt.plot(X, Y, color='green', linewidth=2.5, linestyle='-', label='True Line')
plt.plot(X, fitted_Y, color='blue', linewidth=2.5, linestyle='-', label='Fitted Line')
plt.legend(loc='upper left')
plt.grid(True)
plt.show()