0


吴恩达机器学习课后作业

目录

01-linear regression

线性回归预备知识

假设函数与损失函数:
将计算进
梯度下降函数
在这里插入图片描述

为了方便运算,我们需要将各个函数计算转为矩阵计算
(一)假设函数向量化
在这里插入图片描述
(二)损失函数向量化
在这里插入图片描述
(三)梯度下降函数向量化
在这里插入图片描述
综上
在这里插入图片描述

单变量线性回归( 一个特征值)

入口 利润

#开发人员:肖本杰#阶   段 :学习#开发时间:2022/8/1 17:02#单变量线性回归 一个特征值import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
'''
numpy :科学计算库,处理多维数组,进行数据分析
pandas :是基于NumPy 的一种工具,该工具是为了
        解决数据分析任务而创建的
Matplotlib:Python 的 2D绘图库
matplotlib.pyplot:提供一个类似matlab的绘图框架
'''#导入文件#
data = pd.read_csv('ex1data1.txt',sep=',',names=['population','profit'])#读取文件   names列表指定列名# print(data.head())  #查看前五个数据# print(data.tail())  #查看后五个数据# print(data.describe()) #查看数据描述#可视化#'''
画散点图
data.plot.scatter('population','profit',c='b',label='population',s=30)
第一个参数为横轴名称,第二个参数为纵轴名称,第三个参数为颜色,第四个参数为标签,第五个参数为散点大小
'''
data.plot.scatter('population','profit',c='b',label='population',s=20)
plt.show()#在第一列插入一列1'''
DataFrame.insert(loc, column, value, allow_duplicates=False)
1. loc: 插入的列索引
2. column: 插入列的标签,字符串
3. value :插入列的值
'''
data.insert(0,'ones',1)#插入#print(data.head())'''
   ones  population   profit
0     1      6.1101  17.5920
1     1      5.5277   9.1302
2     1      8.5186  13.6620
3     1      7.0032  11.8540
4     1      5.8598   6.8233
'''#切片取出数据集形成矩阵'''
data.iloc[起始行:终止行,起始列,终止列]
'''
X = data.iloc[:,0:2]#所有行,0列和1列#print(x.head())
y = data.iloc[:,2:]#print(y.head())#将数据转化为数组
X = X.values
y = y.values
y = y.reshape(97,1)#y转化为二维数组方便运算#定义损失函数defcostFunction(X,y,theta):
    inner = np.power(X @ theta - y,2)return np.sum(inner)/(2*len(X))#初始化theta
theta = np.zeros((2,1))#初始theta全为0print(costFunction(X,y,theta))#梯度下降函数defgradienDescent(X,y,theta,alpha,iters):
    costs =[]for i inrange(iters):
        theta = theta -(X.T @ (X@theta - y))* alpha /len(X)#迭代梯度下降
        cost = costFunction(X,y,theta)#代价函数值保存
        costs.append(cost)return theta,costs

#初始化α,迭代次数
alpha =0.02
iters =2000

theta,costs = gradienDescent(X,y,theta,alpha,iters)#可视化代价函数图像
fig,ax = plt.subplots()
ax.plot(np.arange(iters),costs)#画直线图
ax.set(xlabel ='iters',ylabel='cost',title ='cost vs iters')#设置横纵轴意义
plt.show()

x = np.linspace(y.min(),y.max(),100)#代表横坐标取值
y_ = theta[0,0]+theta[1,0]* x #拟合直线函数#拟合函数可视化
fig,ax = plt.subplots()
ax.scatter(X[:,1:2],y,label='training data')#画散点图

ax.plot(x,y_,'r',label='predict')#画假设函数直线图
ax.legend()
ax.set(label='population',ylabel='profit')
plt.show()

画特征值散点图
在这里插入图片描述
梯度下降过程(损失函数变化曲线)
在这里插入图片描述
最终假设函数的拟合效果
在这里插入图片描述

单变量线性回归( 多个特征值)

房屋大小 房间数 价格

#开发人员:肖本杰#阶   段 :学习#开发时间:2022/8/13 15:05#单变量线性回归 多个特征值import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#读取文件
data = pd.read_csv('ex1data2.txt',sep=',',names=['size','bedrooms','price'])#读取文件   names列表指定列名#特征归一化defnormalize_feature(data):return(data - data.mean())/ data.std()#(数据 - 平均值)/方差
data = normalize_feature(data)print(data.head())#特征值可视化
data.plot.scatter('size','price',c='b',label='bedrooms',s=20)#画卧室数与价格的散点图
plt.show()
data.plot.scatter('bedrooms','price',c='b',label='bedrooms',s=20)#画房间大小与价格的散点图
plt.show()#插入一列1
data.insert(0,'ones',1)#插入print(data.head())#构造数据集
X = data.iloc[:,0:3]
y = data.iloc[:,3:4]#将dadaframe转成数组
X = X.values #(47,3)
y = y.values #(47,)
y = y.reshape(47,1)#损失函数defcostFunction(X,y,theta):
    inner = np.power(X@theta - y,2)return np.sum(inner)/(2*len(X))

theta = np.zeros((3,1))#梯度下降函数defgradienDescent(X,y,theta,alpha,iters):
    costs =[]for i inrange(iters):
        theta = theta -(X.T @ (X@theta - y))* alpha /len(X)#迭代梯度下降
        cost = costFunction(X,y,theta)#代价函数值保存
        costs.append(cost)return theta,costs

#不同的alpha的效果
candinate_alpha =[0.0003,0.003,0.03,0.001,0.01]
iters =2000#绘图
fig,ax = plt.subplots()for alpha in candinate_alpha:
    _,costs = gradienDescent(X,y,theta,alpha,iters)
    ax.plot(np.arange(iters),costs,label = alpha)
    ax.legend()
ax.set(xlabel='iters',ylabel='cost',title='cost vs iters')
plt.show()

房间大小特征与价格的散点图
在这里插入图片描述
房间数量特征与价格的散点图
在这里插入图片描述
不同的学习率,损失函数的下降情况
在这里插入图片描述

单变量线性回归( 正规方程)

人口 利润

#开发人员:肖本杰#阶   段 :学习#开发时间:2022/8/13 15:05#单变量线性回归 多个特征值import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('ex1data1.txt',sep=',',names=['population','profit'])
data.insert(0,'ones',1)#插入#print(data.head())
X = data.iloc[:,0:2]#所有行,0列和1列
y = data.iloc[:,2:]
X = X.values
y = y.values
y = y.reshape(97,1)#y转化为二维数组方便运算#正规方程函数defnormalEquation(X,y):
    theta = np.linalg.inv(X.T @ X) @ X.T @ y
    return theta
theta = normalEquation(X,y)print(theta)

本文转载自: https://blog.csdn.net/Anterior_condyle/article/details/126320196
版权归原作者 Knock man 所有, 如有侵权,请联系我们删除。

“吴恩达机器学习课后作业”的评论:

还没有评论