多变量线性回归
练习1还包括一个房屋价格数据集,其中有2个变量(房子的大小,卧室的数量)和目标(房子的价格)。 我们使用我们已经应用的技术来分析数据集。
path = 'ex1data2.txt'
data2 = pd.read_csv(path,header=None,names=['Size','Bedrooms','price'])
data2.head()
对于此任务,我们添加了另一个预处理步骤 - 特征归一化。 这个对于pandas来说很简单
如果这个房子价格不归一化,它的数量级和你输入值规一化数量级差别太大,几十万的数量级和个位小数做回归,就不能保证收敛了 预测的y和实际上y几十万差的太多了
data2 = (data2 - data2.mean()) / data2.std()
data2.head()
现在我们重复第1部分的预处理步骤,并对新数据集运行线性回归程序。点击上一小节里面单变量线性回归
# add ones column
# data2.insert(0,'Ones',1)
# set X (training data) and y (target variable)
cols = data2.shape[1]
X2 = data2.iloc[:,0:cols-1]
y2 = data2.iloc[:,cols-1:cols]
# convert to matrices and initialize theta
X2 = np.matrix(X2.values)
y2 = np.matrix(y2.values)
theta2 = np.matrix(np.array([0,0,0]))
# perform linear regression on the data set
g2 , cost2 = gradientDescent(X2,y2,theta2,alpha,iters)
computeCost(X2,y2,g2)
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iters), cost2, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
normal equation(正规方程)(选做)
np.linalg.inv求逆操作 @相当于dot() ,dot函数可以通过numpy库调用,也可以由数组实例对象进行调用。a.dot(b) 与 np.dot(a,b)效果相同。
# 正规方程
def normalEqn(X, y):
# your code here (appro ~ 1 lines)
theta = np.linalg.inv(X.T@X)@X.T@y
return theta
final_theta2=normalEqn(X, y)#感觉和批量梯度下降的theta的值有点差距
final_theta2
#梯度下降得到的结果是matrix([[-3.24140214, 1.1272942 ]])
推导
数据以及源码:https://github.com/XiangLinPro/MLPractice
所有巧合的是要么是上天注定要么是一个人偷偷的在努力。
个人微信公众号,专注于学习资源、笔记分享,欢迎关注。我们一起成长,一起学习。一直纯真着,善良着,温情地热爱生活,,如果觉得有点用的话,请不要吝啬你手中点赞的权力,谢谢我亲爱的读者朋友。
The distance between your dreams and reality is called action.
梦想和现实之间的那段距离叫做行动。
2020年4月12 00:32日于重庆城口
好好学习,天天向上,终有所获