多变量线性回归(梯度下降算法)——机器学习(吴恩达课后作业)
多变量线性回归(梯度下降算法)——机器学习(吴恩达课后作业)
多变量线性回归
题目:通过两个特征变量房子的大小和卧室的数量来预测房子的价格
编写程序的过程
1.要引进的库
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.sans-serif']=['SimHei']#用黑体显示中文
2.导入数据集
df=pd.read_csv('C:/Users/Administrator/AppData/Local/Temp/Temp1_machine-learning-ex1.zip/machine-learning-ex1/ex1/ex1data2.txt',
header=None,
names=['房子的大小','卧室的数量','房子的价格'])
df.head()
显示输出结果:
可以发现特征变量之间的值不在一个相近的范围内,所以要对特征变量进行特征缩放
X =df.loc[:,['房子的大小','卧室的数量']]
y=df.loc[:,'房子的价格']
X=(X-X.mean())/X.std()
X.insert(0,'ones',1)
X.head()
补充:1.X.mean()默认是跨行求均值。这里的X是指特征缩放前的X
2.特征缩放是要将特征变量的值在一个相似的范围内。
在运用梯度下降算法时,如果特征变量的值不在一个相似的范围内,要对特征变量进行特征缩放,否则会影响收敛
X=np.matrix(X.values)
y=np.matrix(y.values)
theta=(np.matrix([0,0,0])).T
X.shape # 检查他们的维数
y.shape
theta.shape
1.定义代价函数
def computeCost(x,y,theta):
inner=np.sum(np.power((theta.T*x.T-y),2))
return inner/(2*len(x))
2.定义梯度下降函数
def gradientDescent(x,y,theta,alpha,iters):
temp=np.matrix(np.zeros(theta.shape))
cost=np.zeros(iters)
for i in range(iters):
temp=theta-(alpha/len(x))*((theta.T*x.T-y)*x).T
theta=temp
cost[i]=computeCost(x,y,theta)
return theta,cost
3.调用梯度下降函数
alpha=0.001
iters=10000
finally_theta,cost=gradientDescent(X,y,theta,alpha,iters)
可以发现,theta的值很大
x=np.arange(iters)
fig,ax=plt.subplots()
ax.plot(x,cost,'r')
ax.set_xlabel('迭代次数')
ax.set_ylabel('代价函数值')
ax.set_title('代价函数随迭代次数增加的变化曲线')
plt.show()
输出结果为:
观察曲线,发现其收敛。
只对特征变量进行特征放缩以后,theta的取值比较大。
下面对对特征变量和标签变量同时进行特征缩放,然后运用梯度下降算法。
1.特征缩放
df.head()
df=(df-df.mean())/df.std()
df.head()
2.初始化
df.insert(0,'ones',1)
X=df.loc[:,['ones','房子的大小','卧室的数量']]
y=df.loc[:,'房子的价格']
X=np.matrix(X.values)
y=np.matrix(y.values)
theta=(np.matrix([0,0,0])).T
X.shape
y.shape
theta.shape
输出结果为:
3.调用梯度下降算法
alpha=0.001
iters=10000
finally_theta,cost=gradientDescent(X,y,theta,alpha,iters)
可以发现,不对y进行特征缩放和对y进行特征缩放最后所得到的参数theta差不多是一样的
x=np.arange(iters)
fig,ax=plt.subplots()
ax.plot(x,cost,'r')
ax.set_xlabel('迭代次数')
ax.set_ylabel('代价函数值')
ax.set_title('代价函数随迭代次数增加的变化曲线')
plt.show()
输出结果为:
补充:
学习速率alpha会影响收敛速度
当迭代次数—代价函数没有收敛时,可以适当增大alpha和iters.
多变量线性回归(梯度下降算法)——机器学习(吴恩达课后作业)相关教程
C 语言基础
C 语言基础 C语言基础 第一个C程序 标识符 变量及赋值 常量 直接常量 符号常量 基本数据类型 格式化输出语句 自动类型转换 强制类型转换 第一个C程序 #include stdio.h // 头文件/* 以下是主函数 */int main(){ printf(Hello World); return 0;} 头文件是通知
深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-逻辑回归与
深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-逻辑回归与交叉熵概述-05 线性回归预测的是一个连续值,逻辑回归给出的“是”和“否”的答案一个二元分类的问题。 sigmoid函数是一个概率分布函数,给定某个输入,它将输出为一个概率值。 逻辑回归损失函数
C语言之结构体相关知识
C语言之结构体相关知识 结构体变量的定义 struct point{int x;int y;}p1; //声明类型的同时定义变量p1struct point p2; //定义结构体变量p2 结构体变量的初始化 struct point={x,y}; //定义变量的同时赋值struct Stu{char name[20];int age;};struct Stu s={z
Linux自定义命令和环境变量
Linux自定义命令和环境变量 Linux自定义命令和环境变量 环境变量 系统自带环境变量 自定义环境变量 自定义命令 查看自定义命令 自定义命令 环境变量 这种环境变量针对所有用户和环境都适用。 变量名称 作用 HOME 用户的家目录(即主目录) SHELL 用户在使用的
最详细讲解指针
最详细讲解指针 指针 目录 指针 一、指针变量的定义 例题: 二、数组指针 例题1: 例题2: 三、指向多维数组的指针变量 Ⅰ . 指针与指针的区别 例题1: 例题2: 例题3: Ⅱ . 指向由m个元素组成的一维数组的指针变量 例题1: 例题2: 四、指向字符串的指针变
Tensorflow逻辑回归处理MNIST数据集
Tensorflow逻辑回归处理MNIST数据集 #1:导入所需的软件import tensorflow as tf'''获取mnist数据放在当前文件夹下,利用input_data函数解析该数据集train_img和train——label构成训练集,包含60000个手写体数字图片和对应的标签test_img和test_label表示测试
web前端高级 - 深度剖析JS变量提升的机制
web前端高级 - 深度剖析JS变量提升的机制 变量提升 变量提升:在当前上下文中(全局/私有/块级),js代码自上而下执行之前,浏览器会提前处理一些事情(可以理解为词法解析的一个环节,词法解析一定要发生在代码执行之前):会把当前上下文中所有带var/functi
吴恩达线性回归总结
吴恩达线性回归总结 吴恩达线性回归总结 数据集地址: Hypothesis: 文章目录 吴恩达线性回归总结 课后习题题目 一、吴恩达线性回归函数理解 二、代码演示 1.引入库 2.生成一个5阶单位阵 3.读取数据 4.数据可视化 5.数据预处理 6.计算J(?) 7.梯度下降函数计算t