线性回归python

1.线性回归简介
线性回归定义:
  百科中解释
我个人的理解就是:线性回归算法就是一个使用线性函数作为模型框架(y=w∗x+b)、并通过优化算法对训练数据进行训练、最终得出最优(全局最优解或局部最优)参数的过程。

y:我们需要预测的数值;

w:模型的参数(即我们需要通过训练调整的的值)

x:已知的特征值

b:模型的偏移量

我们的目的是通过已知的x和y,通过训练找出合适的参数w和b来模拟x与y之间的关系,并最终通过x来预测y。

分类:
  线性回归属于监督学习中的回归算法;

线性回归作为机器学习的入门级算法,很适合刚接触机器学习的新手。虽然线性回归本身比较简单,但是麻雀虽小,五脏俱全,其中涉及到的“线性模型”、“目标函数”、“梯度下降”、“迭代”、“评价准则”等思想与其他复杂的机器学习算法是相通的,深入理解线性回归后可以帮助你更加轻松的学习其他机器学习算法。

2.线性回归模型解析
2.1 线性回归模型示意图

在这里插入图片描述
2.2模型的组成部件
  2.2.1 假设函数(Hypothesis function)
 在这里插入图片描述

2.2.2 损失函数:(Cost function)
在这里插入图片描述

2.2.3 目标函数:(Goal function)
在这里插入图片描述
2.2.4 优化算法:(optimization algorithm)
  梯度下降法(Gradient descent)关于梯度下降法这里不详细介绍;

3.使用python实现线性回归算法

#-*- coding: utf-8 -*-
import numpy as np
from matplotlib import pyplot as plt


#生成训练使用数据;这里线性函数为 y = 1.5*x + 1.3
def data_generate():
    #随机生成100个数据
    x = np.random.randn(100)
    theta = 0.5   #误差系数
    #为数据添加干扰
    y = 1.5*x + 1.3 + theta*np.random.randn(100)
    return x,y

class LinearRegression():
    '''
    线性回归类
    参数:
    alpha:迭代步长
    n_iter:迭代次数
    使用示例:
    lr = LinearRegression() #实例化类
    lr.fit(X_train,y_train) #训练模型
    y_predict = lr.predict(X_test) #预测训练数据
    lr.plotFigure()用于画出样本散点图与预测模型
    '''
    def __init__(self,alpha=0.02,n_iter=1000):
        self._alpha = alpha     #步长
        self._n_iter = n_iter   #最大迭代次数

    #初始化模型参数
    def initialPara(self):
        #初始化w,b均为0
        return 0,0

    #训练模型
    def fit(self,X_train,y_train):
        #保存原始数据
        self.X_source = X_train.copy()
        self.y_source = y_train.copy()

        #获取训练样本个数
        sample_num = X_train.shape[0]
        # 初始化w,w0
        self._w, self._b = self.initialPara()

        #创建列表存放每次每次迭代后的损失值
        self.cost = []

        #开始训练迭代
        for _ in range(self._n_iter):
            y_predict = self.predict(X_train)
            y_bias = y_train - y_predict
            self.cost.append(np.dot(y_bias,y_bias)/(2 * sample_num))
            self._w += self._alpha * np.dot(X_train.T,y_bias)/sample_num
            self._b += self._alpha * np.sum(y_bias)/sample_num

    def predict(self,X_test):
        return self._w * X_test + self._b

    #画出样本散点图以及使用模型预测的线条
    def plotFigure(self):
        #样本散点图
        plt.scatter(self.X_source,self.y_source,c='r',label="samples",linewidths=0.4)

        #模型预测图
        x1_min = self.X_source.min()
        x1_max = self.X_source.max()
        X_predict = np.arange(x1_min,x1_max,step=0.01)
        plt.legend(loc='upper left')

        plt.plot(X_predict,self._w*X_predict+self._b)
        plt.show()

if __name__ == '__main__':
    #创建训练数据
    x_data,y_data = data_generate()

    #使用线性回归类生成模型
    lr = LinearRegression()
    lr.fit(x_data,y_data)

    #打印出参数
    print(lr._w,lr._b)
    #画出损失值随迭代次数的变化图
    plt.plot(lr.cost)
    plt.show()
    #画出样本散点图以及模型的预测图
    lr.plotFigure()

    #预测x
    x = np.array([3])
    print("The input x is{0},then the predict of y is:{1}".format(x,lr.predict(x)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值