scikit-learn之线性回归

1、线性回归(Linear Regression)
下面是一个用于回归方法的集合,其目标值是根据输入变量的线性组合(Linear combination)表示。在数学概念中,y^表示预测值(predicted value)。y^(w,x) = w0+w1x1+w2x2+....+wpxp.由上面模型,我们指定向量W=(w1,w2,...wp)为系数(weight)coef_,和w0为截距intercept_
2、最小二乘(least square)
线性回归训练了一个具有系数W的线性模型,是的最小化根据数据集的观察值和通过线性相似预测值之间的残差(residual)。数学上解决了这样一个问题:min(w)||Xw - y||2^2然而,一般最小二乘的系数估计依赖于模型项的独立性。当相关项和设计矩阵x的列具有近似线性相关性时,设计矩阵变得接近于奇异,因此,最小二乘估计变得对所观察到的响应中的随机误差高度敏感,产生大的方差。这种情况可能出现多重共线性的,例如,当数据收集没有实验设计。
3、复杂度
这个方法计算最小平法办法用了对X的奇异值分解(SVD),如果X是一个n乘以p的矩阵,则这个方法具有O(np^2)的复杂度(假设n>=p)
4、实现:
from sklearn import linear_model
# 1、建立线性回归模型
reg = linear_model.LinearRegression()
# 2、根据输入数据训练模型
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
reg.coef_# 线性模型系数
reg.intercept_ # 模型截距
5、可视化
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
# 1、加载数据集
diabetes = datasets.load_diabetes()
# 2、只用一个特征
diabetes_X = diabetes.data[:, np.newaxis, 2]
# 3、将数据集分为训练集个测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# 4、分割预测值为训练和测试
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# 5、创建线性回归模型
regr = linear_model.LinearRegression()
# 6、训练模型
regr.fit(diabetes_X_train, diabetes_y_train)
# 7、使用测试集预测
diabetes_y_pred = regr.predict(diabetes_X_test)
# 8、系数
print("Coefficients:\n", regr.coef_)
# 9、均方误差
print("Mean squared error: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# 10、解释方差得分;1 是完美预测
print("Variance score:%.2f" % r2_score(diabetes_y_test, diabetes_y_pred))
# 11、可视化输出结果
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
 
 
Coefficients:
 [ 938.23786125]
Mean squared error: 2548.07
Variance score:0.47
 
 
 

猜你喜欢

转载自blog.csdn.net/wjplearning/article/details/79323694