线性回归 linear regression (implement by python)

记得高中的时候就学过线性回归,那个时候就是数学课上最后一个章节,我当时只是了解。没想到线性回归可以用在机器学习领域里,用来做预测模型。

先从单变量线性回归说起。

一个变量决定一个值,当给出多组变量和值组成的数据(x1,y1),(x2,y2),(x3,y3).......现在需要根据这些数据建立一个模型,来预测新给出的变量x对应的那个y值。

比如预测房价,房子的大小就是就是这个变量,房价就是这个要预测的y值。

单变量的预测模型可以这样表示:


多变量预测模型与上面类似:


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

好了,模型很简单。现在既然有了模型,那么剩下的工作就是确定theta的值。下面的梯度下降算法就是通过很多样本数据中学习出theta的值来。


算法初始的时候,theta就是可以是任意值。式中i表示第i个样本数据。alpha是学习速率。当单一变量时候,j的取值只有0和1,而所有样本中x0始终为1,x1为样本数据中单变量的值。算法的最终目标是利用上面的式子迭代求得theta0和theta1.

下面是单变量线性回归中的梯度下降算法的Python实现:

__author__ = 'jianyong'

# machine learn ,linear regression,python implemention
import numpy as np

def gradientDescent(X,y,theta,alpha,m,numIterations):
    XTrans=X.transpose()
    for i in range(0,numIterations):
        h=np.dot(X,theta)
        loss=h-y
        cost=np.sum(loss ** 2)/(2 * m)
        print("Iteration %d cost:%f" % (i,cost))
        gradient=np.dot(XTrans,loss)/m
        theta=theta-alpha*gradient
    return theta

# generate some random data
import random
def genData(numPoints,bias,variance):
    x=np.zeros(shape=(numPoints,2))
    y=np.zeros(shape=numPoints)
    for i in range(numPoints):
        x[i][0]=1
        x[i][1]=i
        y[i]=(i+bias)+random.uniform(0,1)*variance
    return x,y

x,y=genData(100,25,10)
m,n=np.shape(x)
numIterations=100000
alpha=0.0005
theta=np.ones(n)
theta=gradientDescent(x,y,theta,alpha,m,numIterations)
print(theta)
# plot x,y
import pylab
# pylab.plot(x,y)
pylab.scatter(x[:,1],y)
pylab.plot(x[:,1],x.dot(theta),color='r')
pylab.show()


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值