用Python实现机器学习算法:线性回归

2017 年 11 月 30 日 七月在线实验室

在 Kaggle 最新发布的全球数据科学/机器学习现状报告中,来自 50 多个国家的 16000 多位从业者纷纷向新手们推荐 Python 语言,用以学习机器学习。

那么,用Python实现出来的机器学习算法都是什么样子呢? 东南大学研究生“Lawlite”在GitHub 上发布了一个项目——机器学习算法的Python实现,下面从线性回归到反向传播算法、从SVM到K-means聚类算法,咱们一一来分析其中的Python代码。


线性回归

https://github.com/lawlite19/MachineLearning_Python/tree/master/LinearRegression


全部代码

https://github.com/lawlite19/MachineLearning_Python/blob/master/LinearRegression/LinearRegression.py


代价函数

其中: 

下面就是要求出theta,使代价最小,即代表我们拟合出来的方程距离真实值最近


共有m条数据,其中代表我们要拟合出来的方程到真实值距离的平方,平方的原因是因为可能有负值,正负可能会抵消


前面有系数2的原因是下面求梯度是对每个变量求偏导,2可以消去


实现代码:


# 计算代价函数

def computerCost(X,y,theta):

    m = len(y)

    J = 0

    

    J = (np.transpose(X*theta-y))*(X*theta-y)/(2*m) #计算代价J

    return J


注意这里的X是真实数据前加了一列1,因为有theta(0)


梯度下降算法

代价函数对求偏导得到:

所以对theta的更新可以写为: 其中为学习速率,控制梯度下降的速度,一般取0.01,0.03,0.1,0.3.....


为什么梯度下降可以逐步减小代价函数?


假设函数f(x),泰勒展开:f(x+△x)=f(x)+f'(x)*△x+o(△x),

令:△x=-α*f'(x) ,即负梯度方向乘以一个很小的步长α

将△x代入泰勒展开式中:f(x+x)=f(x)-α*[f'(x)]²+o(△x)

可以看出,α是取得很小的正数,[f'(x)]²也是正数,所以可以得出:f(x+△x)<=f(x)

所以沿着负梯度放下,函数在减小,多维情况一样。


# 梯度下降算法

def gradientDescent(X,y,theta,alpha,num_iters):

    m = len(y)      

    n = len(theta)

    

    temp = np.matrix(np.zeros((n,num_iters)))   # 暂存每次迭代计算的theta,转化为矩阵形式

    

    J_history = np.zeros((num_iters,1)) #记录每次迭代计算的代价值

    

    for i in range(num_iters):  # 遍历迭代次数    

        h = np.dot(X,theta)     # 计算内积,matrix可以直接乘

        temp[:,i] = theta - ((alpha/m)*(np.dot(np.transpose(X),h-y)))   #梯度的计算

        theta = temp[:,i]

        J_history[i] = computerCost(X,y,theta)      #调用计算代价函数

        print '.',      

    return theta,J_history  


均值归一化

目的是使数据都缩放到一个范围内,便于使用梯度下降算法其中  为所有此feture数据的平均值;可以是最大值-最小值,也可以是这个feature对应的数据的标准差


实现代码:


# 归一化feature

def featureNormaliza(X):

    X_norm = np.array(X)            #将X转化为numpy数组对象,才可以进行矩阵的运算

    #定义所需变量

    mu = np.zeros((1,X.shape[1]))   

    sigma = np.zeros((1,X.shape[1]))

    

    mu = np.mean(X_norm,0)          # 求每一列的平均值(0指定为列,1代表行)

    sigma = np.std(X_norm,0)        # 求每一列的标准差

    for i in range(X.shape[1]):     # 遍历列

        X_norm[:,i] = (X_norm[:,i]-mu[i])/sigma[i]  # 归一化

    

    return X_norm,mu,sigma


注意预测的时候也需要均值归一化数据


最终运行结果

代价随迭代次数的变化


使用scikit-learn库中的线性模型实现

https://github.com/lawlite19/MachineLearning_Python/blob/master/LinearRegression/LinearRegression_scikit-learn.py


导入包

from sklearn import linear_model 

from sklearn.preprocessing import StandardScaler    #引入缩放的包 


归一化

# 归一化操作    

scaler = StandardScaler()        

scaler.fit(X)     

x_train = scaler.transform(X)     

x_test = scaler.transform(np.array([1650,3])) 


线性模型拟合

 # 线性模型拟合     

model = linear_model.LinearRegression()     

model.fit(x_train, y) 


预测

#预测结果     

result = model.predict(x_test) 


(未完待续)

作者:lawlite19

来源:

https://github.com/lawlite19/MachineLearning_Python#




点击下方“阅读全文”即刻学Python

登录查看更多
1

相关内容

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
专知会员服务
139+阅读 · 2020年5月19日
机器学习速查手册,135页pdf
专知会员服务
341+阅读 · 2020年3月15日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
200+阅读 · 2020年2月11日
专知会员服务
161+阅读 · 2020年1月16日
sklearn 与分类算法
人工智能头条
7+阅读 · 2019年3月12日
用Python实现线性回归,8种方法哪个最高效?
七月在线实验室
7+阅读 · 2018年4月19日
学会这10种机器学习算法,你才算入门(附教程)
七月在线实验室
4+阅读 · 2018年4月13日
干货:10 种机器学习算法的要点(附 Python代码)
全球人工智能
4+阅读 · 2018年1月5日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
动手写机器学习算法:SVM支持向量机(附代码)
七月在线实验室
12+阅读 · 2017年12月5日
机器学习基础篇--监督学习经典案例(Python实现)
Python技术博文
8+阅读 · 2017年10月24日
机器学习算法实践:Platt SMO 和遗传算法优化 SVM
Python开发者
7+阅读 · 2017年10月21日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
Neural Arithmetic Logic Units
Arxiv
5+阅读 · 2018年8月1日
Arxiv
26+阅读 · 2018年2月27日
Arxiv
3+阅读 · 2017年7月6日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关VIP内容
专知会员服务
139+阅读 · 2020年5月19日
机器学习速查手册,135页pdf
专知会员服务
341+阅读 · 2020年3月15日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
200+阅读 · 2020年2月11日
专知会员服务
161+阅读 · 2020年1月16日
相关资讯
sklearn 与分类算法
人工智能头条
7+阅读 · 2019年3月12日
用Python实现线性回归,8种方法哪个最高效?
七月在线实验室
7+阅读 · 2018年4月19日
学会这10种机器学习算法,你才算入门(附教程)
七月在线实验室
4+阅读 · 2018年4月13日
干货:10 种机器学习算法的要点(附 Python代码)
全球人工智能
4+阅读 · 2018年1月5日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
动手写机器学习算法:SVM支持向量机(附代码)
七月在线实验室
12+阅读 · 2017年12月5日
机器学习基础篇--监督学习经典案例(Python实现)
Python技术博文
8+阅读 · 2017年10月24日
机器学习算法实践:Platt SMO 和遗传算法优化 SVM
Python开发者
7+阅读 · 2017年10月21日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
Top
微信扫码咨询专知VIP会员