想知道PolynomialFeatures的fit做了什么

来源:8-2 scikit-learn中的多项式回归与Pipeline

IT_god

2019-04-24

老师见谅,问题好像有点多了。。。。
初始化的时候设置好degress后,为什么还要fit呢
由上一节内容,知道了degree,对应地用hstack对X操作就得到了【X,X2,…,Xdegress】矩阵不就好了吗,那么PolynomialFeatures的fit方法是做了什么呢?
还有个问题就是,之前讲LinearRegression里面的fit包括了将特征矩阵添加了一列全为1的X0
,方便来求theta0,也就是intercept_. 那么这里的
poly = PolynomialFeatures(degree=2)
poly.fit(X)
X2 = poly.transform(X)

也会因为表示X的零次幂,也得到了第一列全为1的X2,那么X2放进Ln_reg.fit()中的时候,此时X2就应该有头两列都是1的列向量了,一列来自ln_reg.fit中,一列来自poly.transform中的求X的零次幂。。。 而梯度下降更新theta的时候,求梯度这个向量的时候,梯度这个向量里的每一个元素分别是代价函数对各theta的偏导。 为什么X的第一列(全是1)和X的第二列(也全是1),求出来的theta0(对应intercept_ ?) 和 theta1(coef_的第一个元素,为0)会不一样呢,

写回答

1回答

liuyubobobo

2019-04-25

1)


PolynomialFeatures的fit没有作用。这只是sklearn设计的一个标准。


整体,这样的设计,和StandardScaler为什么要y参数,原因是一样的。满足一个固定的标准,在Pipeline内部,统一他们的流程化调用过程。可以参考这个问答:https://coding.imooc.com/learn/questiondetail/69934.html


2)


对,这个X2有两列1,但其实,知识你知道有两列1而已。算法不知道。算法只知道一列1;第二列1,其实是多项式特征做出的一个特征,他是一个x,但是,你知道,这组x的值,对于任何一个样本,都为1而已。


他们求出对应的theta是不一样的,因为他们完全是两个参数,在我们的梯度向量的两个不同的维度里。但是,我们的梯度下降,最终会得到最优解。所以,这并不影响我们最终的预测结果。


你可以理解成,我们给整个X添加了一个新特征,这个新特征对任何一个样本都是1,所以,添加不添加,没有关系。对预测没有影响。但是,添加了以后,我们的梯度的维度就变了。在梯度下降法的过程中,我们会为这个新特征找到一个对应的theta。


当然了,由于你知道这个特征肯定是1,将这列特征直接删掉,也没有任何问题:)


继续加油!:)

1
1
IT_god
非常感谢!
2019-04-25
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程