1.1.多变量线性回归

1)题目:

在本部分的练习中,需要预测房价,输入变量有两个特征,一是房子的面积,二是房子卧室的数量;输出变量是房子的价格。
数据链接: https://pan.baidu.com/s/1-u0iDFDibZc6tTGGx9_wnQ 提取码: 351j

2)知识点概括:

  • 特征缩放:因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1-10,第二个特征的取值范围为1-10000。在梯度下降算法中,代价函数为最小平方误差函数,所以在使用梯度下降算法的时候,算法会明显的偏向于第二个特征,因为它的取值范围更大,而且会导致多元梯度下降法收敛速度过慢。
    常用的特征缩放算法有两种,归一化(normalization)和标准化(standardization)。归一化算法是通过特征的最大最小值将特征缩放到[0,1]区间范围内,而多于许多机器学习算法,标准化也许会更好,标准化是通过特征的平均值和标准差将特征缩放成一个标准的正态分布,均值为0,方差为1。

  • 归一化(min-max规范化):xnorm(i)=x(i)−xminxmax−xminx_{norm}^{(i)}={x^{(i)}-x_{min}\over x_{max}-x_{min}}xnorm(i)​=xmax​−xmin​x(i)−xmin​​或xnorm(i)=x(i)−μxmax−xminx_{norm}^{(i)}={x^{(i)}-\mu \over x_{max}-x_{min}}xnorm(i)​=xmax​−xmin​x(i)−μ​
    找大小的方法直接用np.max()和np.min()就行

  • 标准化(Z-score规范化):xstd(i)=x(i)−μσx_{std}^{(i)}={x^{(i)}-\mu \over \sigma}xstd(i)​=σx(i)−μ​(经过处理的数据服从N(0,1)N(0,1)N(0,1),这在一定程度上改变了特征的分布)

  • Sigmoid函数:xnorm(i)=11+e−x(i)x_{norm}^{(i)}={1 \over 1+e^{-x^{(i)}}}xnorm(i)​=1+e−x(i)1​(Sigmoid函数是一个具有S形曲线的函数,是良好的阈值函数,在(0, 0.5)处中心对称,在(0, 0.5)附近有比较大的斜率而当数据趋向于正无穷和负无穷的时候,映射出来的值就会无限趋向于1和0)

  • 如何判断收敛:
    1)通过代价函数-迭代次数图找出平坦的那段所对应的迭代次数基本上就是收敛了;
    2)自动收敛表示事先选定一个合适的阈值,使得代价函数在某次迭代中减少的数值小于阈值即可。
    如果算法不收敛,可能是学习速率过大。
    ⋯ ,0.001,0.003,0.01,0.03,0.1,0.3,1,⋯\cdots,\ 0.001,\ 0.003,\ 0.01,\ 0.03,\ 0.1,\ 0.3,\ 1,\cdots⋯, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1,⋯每隔3倍尝试学习速率,画出代价函数随学习速率变化的图,来选择较优的学习速率。

3)代码和结果:

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata = np.loadtxt('ex1data2.txt', delimiter=',')
x = data[:, 0:2] #这个范围是左闭右开的
y = data[:, 2]
m = y.size'''特征放缩——均值归一化'''
#def sigmoid(x):
#    return 1.0/(1+np.exp(-x))
def norm(x):sigma = np.std(x, axis=0) # axis=0计算每一列的标准差,=1计算行的  mu = np.mean(x, axis=0)x = (x-mu)/sigmareturn x, mu, sigmax, mu, sigma = norm(x)
x = np.c_[np.ones(m), x] #矩阵合并,第一列加1'''梯度下降法'''
theta = np.zeros(3) #初始化theta的值
num_iteration = 100 #初始化迭代次数
alpha = 1 #初始化学习速率
J = np.zeros(num_iteration)#定义代价函数
def costfun(theta, x=x, y=y, m=m): h_x = x@theta #假设函数的shape是(47,3)return np.sum((h_x-y)**2)/(2*m) #迭代
def gradient_descent(theta, alpha):for i in range(num_iteration):J[i]=costfun(theta) #将每次迭代的代价函数值计入theta = theta-(alpha/m)*(x.T@(x@theta-y))return thetatheta = gradient_descent(theta, alpha)plt.figure(0)
plt.plot(J) #打印代价函数-迭代次数图
plt.xlabel('Number of Iterations')
plt.ylabel('Cost Function Value')
plt.title('The Rate of Convergence')
print(theta)'''正规方程法'''
theta = np.linalg.inv(x.T@x)@x.T@y #求矩阵的逆#预测值
x2 = np.array([1650,3])
x2 = (x2-mu)/sigma
x2 = np.r_[1, x2]
price = x2@theta

最后梯度下降法出来的参数值和迭代图如下:

正规方程法结果:

吴恩达|机器学习作业1.1多变量线性回归相关推荐

  1. 吴恩达机器学习笔记二之多变量线性回归

    本节目录: 多维特征 多变量梯度下降 特征缩放 学习率 正规方程 1.多维特征 含有多个变量的模型,模型中的特征为(x1,x2,-xn), 比如对房价模型增加多个特征 这里,n代表特征的数量, x(i ...

  2. 吴恩达机器学习个人笔记03——多变量线性回归

    目录 3.1 多维特征 3.2 多变量梯度下降 3.3 梯度下降法实践1-特征缩放 3.4 梯度下降法实践2-学习率 3.5 特征和多项式回归 3.6 正规方程 3.7 正规方程及不可逆性 下节将介绍 ...

  3. 吴恩达机器学习作业ex2-python实现

    系列文章目录 吴恩达机器学习作业ex1-python实现 吴恩达机器学习作业ex2-python实现 吴恩达机器学习作业ex3-python实现 作业说明及数据集 链接:https://pan.bai ...

  4. k均值算法python实现(吴恩达机器学习作业)

    k均值算法python实现(吴恩达机器学习作业) 题目要求 数据集 读取mat文件 K-means 实现 结果 问题 题目要求 采用K均值算法对样本进行聚类. 编写K均值算法源代码,对ex7data2 ...

  5. 第一章-机器学习简介 深度之眼_吴恩达机器学习作业训练营

    目录 专栏简介: 一,机器学习简介 1.1 机器学习定义 1.1 机器学习的重要性 1.2 应用领域 二.监督学习 三.无监督学习 四.总结 专栏简介: 本栏主要内容为吴恩达机器学习公开课的学习笔记, ...

  6. 吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现)

    吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现) Introduction 在本实验中,将实现K-means聚类算法,并将其应用于图像压缩.在第二部分实验中,将使用主成分 ...

  7. 吴恩达机器学习作业Python实现(八):异常检测和推荐系统

    吴恩达机器学习系列作业目录 1 Anomaly detection 这部分,您将实现一个异常检测算法来检测服务器计算机中的异常行为.他的特征是测量每个服务器的响应速度(mb/s)和延迟(ms).当你的 ...

  8. 吴恩达机器学习作业Python实现(七):K-means和PCA主成分分析

    吴恩达机器学习系列作业目录 1 K-means Clustering 在这个练习中,您将实现K-means算法并将其用于图像压缩.通过减少图像中出现的颜色的数量,只剩下那些在图像中最常见的颜色. 1. ...

  9. 吴恩达机器学习作业Python实现(六):SVM支持向量机

    吴恩达机器学习系列作业目录 1 Support Vector Machines 1.1 Example Dataset 1 %matplotlib inline import numpy as np ...

最新文章

  1. Linux文件管理命令vi,linux人云亦云(16)文件管理之VI命令一
  2. OpenWrite 新增扩散渠道:慕课手记,支持图片转存!
  3. hive底层原理 sql执行过程_Hive mapreduce SQL实现原理——SQL最终分解为MR任务,而group by在MR里和单词统计MR没有区别了-阿里云开发者社区...
  4. GridView 中设置某列,截取字符串加... 和 鼠标放上去字符全部显示
  5. m.2接口和nvme区别_NVMe/SATA SSD有啥不一样?萌新怎么选
  6. windows下使用pthread库
  7. OpenDDS环境搭建-Windows 10
  8. Vayo-CAM365功能详解(二)
  9. 强化学习——A3C,GA3C
  10. 浮动时间怎么计算_软考学习第21天-----软考案例分析的计算题
  11. 浅谈机器学习中的非线性
  12. 10001UVa伊甸园
  13. C语言填空概念题及答案,C语言填空题以及答案
  14. 参加IBM武汉分公司10周年庆
  15. 面试必考:在 Java 中如何利用 redis 实现一个分布式锁服务
  16. CSAPP第四章家庭作业参考答案
  17. python宿舍管理系统!
  18. 半年以来的图像去雾总结-图像去雾(一)暗通道去雾
  19. 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)
  20. 让Windows2000飞起来(转)

热门文章

  1. 单页面响应式模板:黑石
  2. Nginx(一)-- 初体验
  3. 1.24 Java周末总结 ①乘法数据的溢出 ②测试random随机数几率是否相等 ③判断字符串是否为纯数字...
  4. [bzoj3450]Tyvj1952 Easy[概率dp]
  5. JPA还是JDBC?
  6. python3全栈开发-并发编程,多进程的基本操作
  7. eclipse项目两个红点
  8. vs Obsolete标识符
  9. zabbix的邮件报警
  10. Ubuntu安装Curl的方法