这次博文将和大家一起分享机器学习中的基本模型---回归
回归分析Regression Analysis,回归是根据数据,确定两种或者两种以上变量相互依赖的定量关系。主要有线性回归和非线性回归,我们先讨论线性回归
1 线性回归
数学是来自于生活用于生活的一门学科,在机器学习中它最常用的一个用法就是分析数据预测结果,线性回归就是找到数据的线性关系并做出预测,假设某年房价1--10月份数据是
此处数据是用pyton模拟给出,感兴趣可以参考下面代码:
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
yuefen=range(1,11,1)
yuefen=np.array(yuefen) #将range转化为array
fangjia=[1000]
for i in range(1,10,1):tem=int(fangjia[i-1]*1.2)fangjia.append(tem)
print(yuefen);
print(fangjia)
此时若要预测11月或者12月份的房价,此处我是简单模拟房价每月递增上个月的20%来模拟数据,当然这个关系用数学理论来求解是非常简单的,fangjia(yue)=1000*1.2^(yue-1)即可,这个就是一个简单的函数,可是现实中经常给出数据我们是不知道他们之间的函数关系的,该怎么处理。此时需要解决的第一个问题就是找出这些数据的函数关系,这也就是平时所说的建模!
还记得上期博文中机器学习的概念吗?机器学习是一种实现人工智能的防范,从数据中寻找规律,建立关系,根据建立的关系去解决问题。那么找到这些数据的关系就是我们的重中之重。
机器学习主要分为:
1 supervised learning 监督学习
所谓监督学习就是训练的数据中包括正确结果。即数据有标签。常见的应用有 人脸识别,语音翻译,医学诊断等。
2 unsupervised learning 无监督学习
即训练数据部包括正确的结果,最常用的应用就是聚类分析。
3 半监督学习(semi-supervised learning)
训练数据包括少量正确的结果
4 强化学习(reinforcement learning)
根据每次结果收获的奖惩进行学习,实现优化。典型的应用就是AlphaG。
在案例中我们分析数据得到以下几种线性关系如图:
那么那种线性关系能更准确预测11月和12月房价呢,这个限定范围内的最佳能否代表整体的最好,它是局部最优还是全距最优?这些都是机器学习中需要考虑的问题。在上述绘图模拟过程中,一个线性关系都是用两点法确定的仅仅为了做简要模拟,可以参照示例代码如下:
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
yuefen=range(1,11,1)
yuefen=np.array(yuefen) #将range转化为array
fangjia=[1000]
for i in range(1,10,1):tem=int(fangjia[i-1]*1.2)fangjia.append(tem)
print(yuefen);
print(fangjia)
plt.scatter(yuefen,fangjia,color='red')
#plt.plot(yuefen,fangjia)
#描绘第一条线
diyix=[yuefen[0],yuefen[9]]
diyiy=[fangjia[0],fangjia[9]]
plt.plot(diyix,diyiy,color="green")
dierx=[yuefen[1],yuefen[8]]
diery=[fangjia[1],fangjia[8]]
plt.plot(dierx,diery,color="blue")
disanx=[yuefen[3],yuefen[5]]
disany=[fangjia[3],fangjia[5]]
plt.plot(dierx,diery,color="yellow")
plt.plot(disanx,disany,color="#ff00ff")
plt.show()
而线性关系式为y=ax+b,上面不同的线性关系对应不同的a与b,怎么找到这个最匹配线性关系即找到最合适的a,b值。如何确定最佳a和b,通常用损失函数s(a,b)=取最小值。其中
=ax+b,表示预测函数,但是a,b为位置。如何让s函数取最小值,则通过梯度下降可求,下面简单介绍一下梯度下降法,如函数y=f(x)=
,如何求其最小值,注意一定不可自作聪明的用初中对称轴去套,我们在这里只是讲解一个适用于一般通用的道理---梯度下降算法(截图来自百度百科),
定义步长t,让y对x求导,从一个点入x=0.5开始,按步长逐渐后移,直到找到使得y值收敛的x值。注意步长是,若出现y出现增长则回退,可以降低步长求更精确极小值点。从而求出y取最小值时x的值。通过这个道理来确定s(a,b)=中a,b的值。此处描述请看另一个我在另一个电脑上的截图如下:辅助说明,为了让大家不虚在此停留,在这里总觉得有点说不明白,大家可以在评论区做讨论。
附注:对于一元函数其实用来说明梯度并不合适,梯度是一个向量表示一个方向,对于一个一元二次函数则只要设定一个值取其正负看是否减小或者增加则可以逐渐求得最大或者最小值,因为他们只有一个方向,但是对于二元函数则对应的方向则是四面八方的,则如何确定方向来指导两个变量的变化,则此时需要梯度的支撑。
对于线性回归方程可以理解为二元函数,所以其解就是最佳系数。
这次就和大家先分享到这个为止,本次主要要理解线性回归及梯度,未完待续。