线性回归


多项式回归
多项式就是多元回归的一个变种,只不过是原来需要传入的是X向量,而多项式则只要一个x值就行。通过将x扩展为指定阶数的向量,就可以使用LinearRegression进行回归了。


多项式回归,正则化
在用多项式回归时,可能会使得结果过拟合,为了防止过拟合,加入了正则化项,使得高阶的系数很小或为0,随着阶数的增加,它的系数项会不断增大

[url][/url](线性回归(Ridge,Lasso)的正则化)


sklearn已经提供了扩展的方法——sklearn.preprocessing.PolynomialFeatures。利用这个类可以轻松的将x扩展为X向量,

使用方法:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> X_train = [[1],[2],[3],[4]]
>>> quadratic_featurizer = PolynomialFeatures(degree=2)
>>> X_train_quadratic = quadratic_featurizer.fit_transform(X_train)
>>> print(X_train_quadratic)
[[ 1  1  1]
 [ 1  2  4]
 [ 1  3  9]
 [ 1  4 16]]





它是使用多项式的方法来进行的,如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2)。



PolynomialFeatures有三个参数


degree:控制多项式的度



interaction_only: 默认为False,如果指定为True,那么就不会有特征自己和自己结合的项,上面的二次项中没有a^2和b^2。



include_bias:默认为True。如果为True的话,那么就会有上面的 1那一项。




from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt


X = [[1, 2], [3, 4], [5, 7], [6, 9], [7, 8]]  #两个自变量
# y = [[4], [10], [17], [20], [21]] #Y=2*X1+X2
y = [[4], [10], [17], [20.5], [21.7]] #Y=2*X1+X2

#使用以后的数据集进行线性回归
model = LinearRegression()
model.fit(X, y)                       #X有可能是多维的,调用之后会得到一个对上述数据线性回归的模型

#
print(model.coef_)                    #系数,返回一个list
print(model.intercept_)               #截距

#有模型了就可对数据进行预测了
print(model.predict([[10, 12]]))      #预测值

# #给训练模型打分,注意用在LinearR中使用R^2 conefficient of determination打分
print(model.score(X,y))

XTest = [[7, 8],[10, 12]]
yTest = [[22],[32]]
print(model.score(XTest, yTest))


#使用生成线性回归的数据集,最后的数据集结果用散点图表示(因为这里X为二维的,而scatter中只能取一维)
xTemp =[]
for temp in X:
    xTemp.append(temp[0])

xTemp2 =[]
for temp in X:
    xTemp2.append(temp[1])

#画散点图
plt.scatter(xTemp,y)
plt.scatter(xTemp2,y)
plt.show()




局部加权线性回归(Locally Weighted Linear Regression,LWLR)(就是增加高次项,如x的平方,x的立方等)



此外,局部加权线性回归也存在一定的问题,相对于普通的线性回归,由于引入了权重,大大增加了计算量,虽然取得了不错的拟合效果,但也相应地付出了计算量的代价。我们发现,在k=0.01时,大多的数据点的权重都接近0,所以,如果我们能避免这些计算,将一定程度上减少程序运行的时间,从而缓解计算量增加带来的问题。


稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵