iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python实现线性回归的示例代码
  • 653
分享到

python实现线性回归的示例代码

2024-04-02 19:04:59 653人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1线性回归1.1简单线性回归1.2 多元线性回归1.3 使用sklearn中的线性回归模型1线性回归 1.1简单线性回归 在简单线性回归中,通过调整a和b的参数值,来拟合从x到

1线性回归

1.1简单线性回归

在简单线性回归中,通过调整a和b的参数值,来拟合从x到y的线性关系。下图为进行拟合所需要优化的目标,也即是MES(Mean Squared Error),只不过省略了平均的部分(除以m)。

对于简单线性回归,只有两个参数a和b,通过对MSE优化目标求极值(最小二乘法),即可求得最优a和b如下,所以在训练简单线性回归模型时,也只需要根据数据求解这两个参数值即可。

下面使用波士顿房价数据集中,索引为5的特征RM (average number of rooms per dwelling)来进行简单线性回归。其中使用的评价指标为:

# 以sklearn的形式对simple linear regression 算法进行封装
import numpy as np
import sklearn.datasets as datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error,mean_absolute_error
np.random.seed(123)

class SimpleLinearRegression():
    def __init__(self):
        """
        initialize model parameters
        self.a_=None
        self.b_=None
    def fit(self,x_train,y_train):
        training model parameters
        Parameters
        ----------
            x_train:train x ,shape:data [N,]
            y_train:train y ,shape:data [N,]
        assert (x_train.ndim==1 and y_train.ndim==1),\
            """Simple Linear Regression model can only solve single feature training data"""
        assert len(x_train)==len(y_train),\
            """the size of x_train must be equal to y_train"""
        x_mean=np.mean(x_train)
        y_mean=np.mean(y_train)
        self.a_=np.vdot((x_train-x_mean),(y_train-y_mean))/np.vdot((x_train-x_mean),(x_train-x_mean))
        self.b_=y_mean-self.a_*x_mean
    def predict(self,input_x):
        make predictions based on a batch of data
            input_x:shape->[N,]
        assert input_x.ndim==1 ,\
            """Simple Linear Regression model can only solve single feature data"""
        return np.array([self.pred_(x) for x in input_x])
    def pred_(self,x):
        give a prediction based on single input x
        return self.a_*x+self.b_
    def __repr__(self):
        return "SimpleLinearRegressionModel"
if __name__ == '__main__':
    boston_data = datasets.load_boston()
    x = boston_data['data'][:, 5]  # total x data (506,)
    y = boston_data['target']  # total y data (506,)
    # keep data with target value less than 50.
    x = x[y < 50]  # total x data (490,)
    y = y[y < 50]  # total x data (490,)
    plt.scatter(x, y)
    plt.show()
    # train size:(343,) test size:(147,)
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
    regs = SimpleLinearRegression()
    regs.fit(x_train, y_train)
    y_hat = regs.predict(x_test)
    rmse = np.sqrt(np.sum((y_hat - y_test) ** 2) / len(x_test))
    mse = mean_squared_error(y_test, y_hat)
    mae = mean_absolute_error(y_test, y_hat)
    # notice
    R_squared_Error = 1 - mse / np.var(y_test)
    print('mean squared error:%.2f' % (mse))
    print('root mean squared error:%.2f' % (rmse))
    print('mean absolute error:%.2f' % (mae))
    print('R squared Error:%.2f' % (R_squared_Error))

输出结果:

mean squared error:26.74
root mean squared error:5.17
mean absolute error:3.85
R squared Error:0.50

数据的可视化

1.2 多元线性回归

多元线性回归中,单个x的样本拥有了多个特征,也就是上图中带下标的x。
其结构可以用向量乘法表示出来:
为了便于计算,一般会将x增加一个为1的特征,方便与截距bias计算。

而多元线性回归的优化目标与简单线性回归一致。

通过矩阵求导计算,可以得到方程解,但求解的时间复杂度很高。

下面使用正规方程解的形式,来对波士顿房价的所有特征做多元线性回归。

import numpy as np
from PlayML.metrics import r2_score
from sklearn.model_selection import train_test_split
import sklearn.datasets as datasets
from PlayML.metrics import  root_mean_squared_error
np.random.seed(123)

class LinearRegression():
    def __init__(self):
        self.coef_=None # coeffient
        self.intercept_=None # interception
        self.theta_=None
    def fit_nORMal(self, x_train, y_train):
        """
        use normal equation solution for multiple linear regresion as model parameters
        Parameters
        ----------
        theta=(X^T * X)^-1 * X^T * y
        assert x_train.shape[0] == y_train.shape[0],\
            """size of the x_train must be equal to y_train """
        X_b=np.hstack([np.ones((len(x_train), 1)), x_train])
        self.theta_=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train) # (featere,1)
        self.coef_=self.theta_[1:]
        self.intercept_=self.theta_[0]
    def predict(self,x_pred):
        """给定待预测数据集X_predict,返回表示X_predict的结果向量"""
        assert self.intercept_ is not None and self.coef_ is not None, \
            "must fit before predict!"
        assert x_pred.shape[1] == len(self.coef_), \
            "the feature number of X_predict must be equal to X_train"
        X_b=np.hstack([np.ones((len(x_pred),1)),x_pred])
        return X_b.dot(self.theta_)
    def score(self,x_test,y_test):
        Calculate evaluating indicator socre
        ---------
            x_test:x test data
            y_test:true label y for x test data
        y_pred=self.predict(x_test)
        return r2_score(y_test,y_pred)
    def __repr__(self):
        return "LinearRegression"
if __name__ == '__main__':
    # use boston house price dataset for test
    boston_data = datasets.load_boston()
    x = boston_data['data']  # total x data (506,)
    y = boston_data['target']  # total y data (506,)
    # keep data with target value less than 50.
    x = x[y < 50]  # total x data (490,)
    y = y[y < 50]  # total x data (490,)
    # train size:(343,) test size:(147,)
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3,random_state=123)
    regs = LinearRegression()
    regs.fit_normal(x_train, y_train)
    # calc error
    score=regs.score(x_test,y_test)
    rmse=root_mean_squared_error(y_test,regs.predict(x_test))
    print('R squared error:%.2f' % (score))
    print('Root mean squared error:%.2f' % (rmse))

输出结果:

R squared error:0.79
Root mean squared error:3.36

1.3 使用sklearn中的线性回归模型

import sklearn.datasets as datasets
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn.model_selection import train_test_split
from PlayML.metrics import  root_mean_squared_error
np.random.seed(123)

if __name__ == '__main__':
    # use boston house price dataset
    boston_data = datasets.load_boston()
    x = boston_data['data']  # total x size (506,)
    y = boston_data['target']  # total y size (506,)
    # keep data with target value less than 50.
    x = x[y < 50]  # total x size (490,)
    y = y[y < 50]  # total x size (490,)
    # train size:(343,) test size:(147,)
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=123)
    regs = LinearRegression()
    regs.fit(x_train, y_train)
    # calc error
    score = regs.score(x_test, y_test)
    rmse = root_mean_squared_error(y_test, regs.predict(x_test))
    print('R squared error:%.2f' % (score))
    print('Root mean squared error:%.2f' % (rmse))
    print('coeffient:',regs.coef_.shape)
    print('interception:',regs.intercept_.shape)
R squared error:0.79
Root mean squared error:3.36
coeffient: (13,)
interception: ()

到此这篇关于python实现线性回归的文章就介绍到这了,更多相关Python线性回归内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python实现线性回归的示例代码

本文链接: https://www.lsjlt.com/news/140497.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python实现线性回归的示例代码
    目录1线性回归1.1简单线性回归1.2 多元线性回归1.3 使用sklearn中的线性回归模型1线性回归 1.1简单线性回归 在简单线性回归中,通过调整a和b的参数值,来拟合从x到...
    99+
    2022-11-13
  • Tensorflow实现线性回归模型的示例代码
    目录1.线性与非线性回归案例讲解1.数据集2.读取训练数据Income.csv并可视化展示3.利用Tensorflow搭建和训练神经网络模型【线性回归模型的建立】4. 模型预测1.线...
    99+
    2022-11-11
  • Python scikit-learn 做线性回归的示例代码
    一、概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出。当然了,算法之林虽大,但能者还是有限,能适应某些...
    99+
    2022-06-04
    示例 线性 代码
  • 线性回归与岭回归python代码实现
      在线性回归中我们要求的参数为: 详细的推导可以参见:http://blog.csdn.net/weiyongle1996/article/details/73727505 所以代码实现主要就是实现上式,python代码如下: i...
    99+
    2023-01-31
    线性 代码 python
  • python实现线性回归的代码怎么写
    这篇文章主要介绍“python实现线性回归的代码怎么写”,在日常操作中,相信很多人在python实现线性回归的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python实现线性回归的代码怎么写”的疑...
    99+
    2023-06-29
  • 多元线性回归-python代码
    引言 求解多个自变量和一个因变量之间的线性关系 y=a1x1+a2x2+a3x3+b (y为因变量,x为自变量,a为权重,b为截距。) 数据类型: 1.读数据 '''y=a1x1+a2x2+a...
    99+
    2023-10-06
    python 线性回归
  • R语言实现线性回归的示例
    在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。 简单对来说就是用来确定两种或...
    99+
    2022-11-11
  • R语言实现岭回归的示例代码
    岭参数的一般选择原则 选择k(或lambda)值,使得: 各回归系数的岭估计基本稳定 用最小二乘估计时符号不合理的回归系数,其岭回归的符号变得合理 ...
    99+
    2022-11-12
  • 【数学建模】多元线性回归(Python&Matlab代码实现)
    目录 1 概述 2 算例1 2.1 算例 2.2 Python代码实现  2.3 结果 3 算例2  3.1 算例 3.2 Python代码 3.3 结果 4 算例3 4.1 算例 4.2 Python代码 4.3 结果 5 算例4——Ma...
    99+
    2023-09-16
    python 线性回归 matlab
  • Logistic回归(逻辑回归)及python代码实现
    文章目录 Logistic(Logistic Regression,LR)回归原理讲解参数计算 python代码实现生成数据集不使用其他库实现定义激活函数(标准Logistic函数即Sig...
    99+
    2023-10-24
    回归 逻辑回归 人工智能 python 机器学习 分类
  • python实现线性回归算法
    本文用python实现线性回归算法,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ Created on Fri Oct 11 19:25:11...
    99+
    2022-11-12
  • Python怎么实现线性回归
    Python怎么实现线性回归,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、概述(1)人工智能学习        &n...
    99+
    2023-06-26
  • Python线性回归图文实例详解
    目录前言:1.简单线性回归模型 2.多元线性回归模型2.1 应用F检验法完成模型的显著性检验2.2应用t检验法完成回归系数的显著性检验3.基于回归模型识别异常点4.含有离散变量的回归...
    99+
    2022-11-12
  • Python数学建模StatsModels统计回归之线性回归示例详解
    目录1、背景知识1.1 插值、拟合、回归和预测1.2 线性回归2、Statsmodels 进行线性回归2.1 导入工具包2.2 导入样本数据2.3 建模与拟合2.4 拟合和统计结果的...
    99+
    2022-11-12
  • python实现多线程并得到返回值的示例代码
    目录一、带有返回值的多线程1.1 实现代码1.2 结果二、实现过程2.1 一个普通的爬虫函数2.2 一个简单的多线程传值实例2.3 实现重点三、代码实战四、学习一、带有返回值的多线程...
    99+
    2022-11-10
  • python实现逻辑回归的方法示例
    本文实现的原理很简单,优化方法是用的梯度下降。后面有测试结果。 先来看看实现的示例代码: # coding=utf-8 from math import exp import matplotlib.p...
    99+
    2022-06-04
    示例 逻辑 方法
  • 人工智能—Python实现线性回归
    1、概述 (1)人工智能学习           (2)机器学习  (3)有监督学习  (4)线...
    99+
    2022-11-12
  • python一元线性回归怎么实现
    在Python中,可以使用NumPy和Scikit-learn库来实现一元线性回归。以下是一元线性回归的实现步骤:1. 导入所需的库...
    99+
    2023-08-18
    python
  • python多元线性回归怎么实现
    在Python中,可以使用`scikit-learn`库来实现多元线性回归。首先,需要导入所需的库和模块:```pythonfrom...
    99+
    2023-08-18
    python
  • C#实现FFT(递归法)的示例代码
    目录1. C#实现复数类2. 递归法实现FFT3. 补充:窗函数1. C#实现复数类 我们在进行信号分析的时候,难免会使用到复数。但是遗憾的是,C#没有自带的复数类,以下提供了一种复...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作