多变量线性回归C语言,多变量线性回归(梯度下降算法)——机器学习(吴恩达课后作业)...

多变量线性回归(梯度下降算法)——机器学习(吴恩达课后作业)

多变量线性回归(梯度下降算法)——机器学习(吴恩达课后作业)

多变量线性回归

题目:通过两个特征变量房子的大小和卧室的数量来预测房子的价格

编写程序的过程

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()

显示输出结果:

180987fc850591f2c3698043f8a45cf3.png

可以发现特征变量之间的值不在一个相近的范围内,所以要对特征变量进行特征缩放

X =df.loc[:,['房子的大小','卧室的数量']]

y=df.loc[:,'房子的价格']

X=(X-X.mean())/X.std()

X.insert(0,'ones',1)

X.head()

5485c40efca77f50797840306b4f2cdb.png

补充:1.X.mean()默认是跨行求均值。这里的X是指特征缩放前的X

feb420aab9ac5a069893592639b33c7a.png

2.特征缩放是要将特征变量的值在一个相似的范围内。

在运用梯度下降算法时,如果特征变量的值不在一个相似的范围内,要对特征变量进行特征缩放,否则会影响收敛

X=np.matrix(X.values)

y=np.matrix(y.values)

theta=(np.matrix([0,0,0])).T

X.shape # 检查他们的维数

y.shape

theta.shape

d1005681fe3b326defced4915e6ccdcd.png

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)

6ef1293fb6010b93efbf888d8f018c75.png

可以发现,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()

输出结果为:

9328c51e0ddf50c80adf56487a84ebbe.png观察曲线,发现其收敛。

只对特征变量进行特征放缩以后,theta的取值比较大。

下面对对特征变量和标签变量同时进行特征缩放,然后运用梯度下降算法。

1.特征缩放

df.head()

f4326597f55d08180e90c94418bd341d.png

df=(df-df.mean())/df.std()

df.head()

6da8ce53d2c34f39277c1768a1fad5c8.png

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

输出结果为:

0c63db70f30e2d52801a97243146f32d.png

3.调用梯度下降算法

alpha=0.001

iters=10000

finally_theta,cost=gradientDescent(X,y,theta,alpha,iters)

0085d7ed025bfdf303874526f85c1a19.png

可以发现,不对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()

输出结果为:

93b0194194c94ed45155e8294b5cfa03.png

补充:

学习速率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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值