当前位置:   article > 正文

吴恩达老师机器学习-ex1

吴恩达老师机器学习-ex1

线性回归

有借鉴网上部分博客

第一题 单变量

先导入相关库

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt

读取数据,并展示前五行

  1. data=pd.read_csv(path,header=None,names=["Population","Profit"])
  2. data.head()

先绘制一个散点图,查看数据分布,并规定x,y轴的名字

  1. data.plot(kind="scatter",x="Population",y="Profit",figsize=(12,8))
  2. plt.show

新增一列X_{0},已便构造矩阵

  1. #新增一列x0
  2. data.insert(0,"x0",1)
  3. data.head()

先查看数据有多少列,然后读取相应的列的数据构造矩阵,同时构造一个零矩阵

  1. cols=data.shape[1]
  2. X=data.iloc[:,0:cols-1]
  3. Y=data.iloc[:,cols-1:cols]
  4. X=np.matrix(X.values)
  5. Y=np.matrix(Y.values)
  6. theta=np.zeros((2, 1))

构造代价函数。 代价函数公式:J(\theta _{0},\theta _{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})^{2}

  1. def cost_fuc(X,Y,theta):
  2. cost_matrix=np.power(X*theta-Y,2)
  3. cost_finite=np.sum(cost_matrix)/(2*len(X))
  4. return cost_finite

构造梯度下降函数

  1. def gradient_descent(X,Y,theta,alpha,times):
  2. for i in range(times):
  3. theta[0]=theta[0]-alpha*(1/len(X))*(np.sum(X*theta-Y))
  4. theta[1]=theta[1]-alpha*(1/len(X))*(np.multiply((X*theta-Y),X[1])).sum()
  5. temp0=theta[0]
  6. temp1=theta[1]
  7. cost = cost_func(X, Y, theta)
  8. pass
  9. return theta

调用函数,并绘制线性回归图

  1. theta_last= gradient_descent(x,y,theta,0.02,1500)
  2. data.plot(kind="scatter",x="Population",y="Profit",figsize=(12,8),label='Prediction')
  3. x = np.linspace(data.Population.min(), data.Population.max(), 100)
  4. y = theta[0] + theta[1] * x
  5. plt.plot(x, y)
  6. plt.show()

第二题 多变量

导入相关库并读取文件数据

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. path = "./ex1data2.txt"
  5. data = pd.read_csv(path,header=None,names=["size","bedrooms","price"])
  6. data.head()
  7. #展示两个散点图
  8. path = "./ex1data2.txt"
  9. data = pd.read_csv(path,header=None,names=["size","bedrooms","price"])
  10. data.head()
  11. data.plot(kind="scatter",x="bedrooms",y="price")
  12. plt.show()

由于特征值的数字大小差距较大,进行特征缩放,并构造相关的xy数组

  1. #特征缩放
  2. data = (data - data.mean())/data.std()
  3. data.head()
  4. data.insert(0,"x0",1)
  5. data.head()
  6. cols=data.shape[1]
  7. X=data.iloc[:,0:cols-1]
  8. Y=data.iloc[:,cols-1:cols]
  9. X=X.values
  10. Y=Y.values
  11. theta=np.zeros((3, 1))

代价函数

  1. #代价函数
  2. def cost_func(x,y,theta):
  3. cost_matrix = np.power(x@theta-y,2)
  4. cost_finite = np.sum(cost_matrix)/(2*len(x))
  5. return cost_finite

梯度下降函数

  1. #梯度下降
  2. def gradient_descent(X,Y,theta,alpha,times):
  3. costs = []
  4. for i in range(times):
  5. theta = theta - (X.T @ (X@theta - Y)) * alpha / len(X) #迭代梯度下降
  6. cost = cost_func(X, Y, theta)
  7. costs.append(cost)
  8. pass
  9. return theta,costs

显示图像

  1. alpha_iters = [0.003,0.03,0.0001,0.001,0.01]#设置alpha
  2. counts = 200#循环次数
  3. fig,ax = plt.subplots()
  4. for alpha in alpha_iters:#迭代不同学习率alpha
  5. _,costs = gradient_descent(X,Y,theta,alpha,counts)#得到损失值
  6. ax.plot(np.arange(counts),costs,label = alpha)#设置x轴参数为迭代次数,y轴参数为cost
  7. ax.legend() #加上这句 显示label
  8. ax.set(xlabel= 'counts', #图的坐标轴设置
  9. ylabel = 'cost',
  10. title = 'cost vs counts')#标题
  11. plt.show()#显示图像

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/860946
推荐阅读
相关标签
  

闽ICP备14008679号