已采纳回答 / Beb
个人认为讲师说得有一点问题,不瞒秩或者不正定的时候,存在多个解,并不是没有解,即解不唯一。此时选择哪一个解作为最后模型的参数呢?一是通过既定的选择便好来决定;二是采用梯度下降来近似。我觉得性能问题倒不是主要原因,主要原因是因为存在多个解(至于为什么你可以查查矩阵相关的资料)。
2018-11-25
换了X的值或改一下参数,就会出错。
然后一步步琢磨了下,
theta = theta + np.sum(alpha*(Y-dot(X,theta)) "*X.reshpae" )/3.
实在想不出引号部分有什么用,感觉是多余的,直接删了,就没问题了。
theta = theta + np.sum(alpha*(Y-dot(X,theta)))/3.
这样,随便改X,X里数的个数,参数,都没有问题。记得把‘3.’改成X的数的个数就行。
其实‘/3.’不写也行,会减慢收敛速度‘3’倍,以及得到的值可能是实际参数的近似值
然后一步步琢磨了下,
theta = theta + np.sum(alpha*(Y-dot(X,theta)) "*X.reshpae" )/3.
实在想不出引号部分有什么用,感觉是多余的,直接删了,就没问题了。
theta = theta + np.sum(alpha*(Y-dot(X,theta)))/3.
这样,随便改X,X里数的个数,参数,都没有问题。记得把‘3.’改成X的数的个数就行。
其实‘/3.’不写也行,会减慢收敛速度‘3’倍,以及得到的值可能是实际参数的近似值
2018-08-26
代码更新:Python3.2.6
theat=np.full((4,1),1.,dtype=float) #用 1.0去填充一个4*1的array,类型指定float
alpha=0.1
x0=X.iloc[:,0].values.reshape(-1,1) #-1进行占位,代表有多少个算多少个,例如是150,则-1代表150,其它同理
x1=X.iloc[:,1].values.reshape(-1,1)
x2=X.iloc[:,2].values.reshape(-1,1)
x3=X.iloc[:,3].values.reshape(-1,1)
print(x3[0:6,:])
theat=np.full((4,1),1.,dtype=float) #用 1.0去填充一个4*1的array,类型指定float
alpha=0.1
x0=X.iloc[:,0].values.reshape(-1,1) #-1进行占位,代表有多少个算多少个,例如是150,则-1代表150,其它同理
x1=X.iloc[:,1].values.reshape(-1,1)
x2=X.iloc[:,2].values.reshape(-1,1)
x3=X.iloc[:,3].values.reshape(-1,1)
print(x3[0:6,:])
2018-08-24