linear_regression

Linear Regression

The objective of linear regression is to minimise the cost fucntion:

J(θ)=12i=1m(hθ(x(i))y(i))2

hθ=θTx=θ0+θ1x1+...θnxn

The parameters of your model are the θ values.
There are two kinds of functions to solve this problem:

Least Square method

θ=(XTX)1XTy

Batch Gradient Descent

Derivative of J(θ) on θj :

J(θ)θj=1mi=1m(hθ(x(i))y(i))xj=1m(hθ(x)y)xj

#!/usr/bin/env python
# -*- coding: utf-8 -*-
################################
##Author: Vincent.Y
################################

import numpy as np
class LinearRegression(object):
    """
    solver: 
        ls for least square method, sgd for gridient descent
    """
    def __init__(self,solver="ls",lr=0.2,max_iter=200,bias=False):
        self.solver=solver
        self.coef_=None
        self.bias=bias
        if self.solver=='sgd':
            self.lr=lr
            self.max_iter=max_iter

    def gradient_descent(self,X,y):
        m=len(y)
        for i in xrange(0,self.max_iter):
            pred=X.dot(self.coef_)
            for j in xrange(0,X.shape[1]):
                tmp=X[:,j]
                errors = (pred - y) * tmp#element-wise multi
                self.coef_[j]=self.coef_[j] - self.lr * np.mean(errors)
        return self.coef_

    def fit(self,X,y):
        if self.bias:
            X = np.hstack([X,np.ones((X.shape[0],1))])

        if self.solver=="ls":
            self.coef_=np.linalg.lstsq(X,y)[0]
        else:
            self.coef_=np.zeros(X.shape[1])
            self.coef_=self.gradient_descent(X,y)

    def predict(self,X):
        if self.bias:
            X = np.hstack([X,np.ones((X.shape[0],1))])

        return X.dot(self.coef_)

if __name__=="__main__":
    x=np.array([1,2,3])
    x=x.reshape(-1,1)
    y=np.array([3,5,7])

    model=LinearRegression(bias=True)
    model.fit(x,y)
    print model.coef_
    print model.predict(x)

    model=LinearRegression(bias=True,solver='sgd',max_iter=1000)
    model.fit(x,y)
    print model.coef_
    print model.predict(x)

https://github.com/muyinanhai/ml-learn/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值