以下是回归相关的一系列方法,目标值y是输入变量x的线性组合。用数学表达:是预测值
在这个模块中,我们定义向量 w = (w_1,...,w_p) 为 coef_ ,math:w_0 表示为 intercept_
1.1. 普通最小二乘法
LinearRegression
用系数 :math:w = (w_1,...,w_p) 来拟合一个线性模型, 使得数据集实际观测数据和预测数据(估计值)之间残差平方和最小。数学形式可表达为:
LinearRegression 模型会调用 fit 方法来拟合X,y(X为输入,y为输出).并且会把拟合的线性模型的系数 w 存储到成员变量 coef_
对于普通最小二乘问题,其系数估计依赖模型各项相互独立。当各项是相关的,设计矩阵(Design Matrix) x 的各列近似线性相关, 那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,会产生很大的方差。这种 多重共线性(multicollinearity) 的情况可能真的会出现,比如未经实验设计收集的数据。
1.2.普通最小二乘复杂度
这种方法通过对矩阵 X 奇异值分解(SVD)的方式来计算最小二乘的解。如果 X 是一个(n, p)大小的矩阵,那么代价为
,假设
.


import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
# Load the diabetes dataset
diabetes = datasets.load_diabetes()
# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis, 2]
# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)
# The coefficients
print('Coefficients: \n', regr.coef_)
# The mean square error
print("Residual sum of squares: %.2f"% np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2))
# Explained variance score: 1 is perfect prediction
print('Variance score: %.2f' % regr.score(diabetes_X_test,diabetes_y_test))
# Plot outputs
plt.xlabel("diabetes_X_test")
plt.ylabel("diabetes_y_test")
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue',linewidth=3)
plt.show()