python|线性回归问题

简介: python|线性回归问题

问题描述

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。可以解释为,利用线性回归方程的最小平方函数对一个或多个自变量和因变量之间的关系进行数学建模。这种函数是一个或多个称为回归系数的模型参数的线性组合。其中只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。本文将介绍一个二元线性回归问题。

解决方案

1 线性回归原理

回归问题研究的是因变量和自变量之间的关系,在中学阶段学习过以一个二元一次方程y = w*x + b 这样一条直线对线性关系的表述。这样便可以通过几组确定的数据来得到一个精确的求解结果bw的值。但实际上,由于模型本身的未知性和采集数据偏差等情况,很难精确的求解这两个值。因此,需要用大量样本数据来不断更新演算最终求出一个与真实值最为接近的值。

2 确定b、w最优解

通过数学知识可以知道,函数梯度的方向永远指向函数值变大的方向(如下图1所示),所以,如果向着函数梯度方向的反方向逐步寻查就能得到函数的最小值。

图1 函数梯度方向

因此,需要构造一个loss函数:

对于这个函数模型,又利用:

这两个公式来对bw进行演算更新,使得通过这个模型求解出来的y值最为接近真实值y,且最终得到的bw就是最优解。(注:这里的lr是一个学习率learningrate,可以把它理解为衰减系数,是为了避免bw在更新时,跨度太大而跳过最小值。)

3 算法流程及代码

(1)构建一个线性模型,遍历points数组,对数组数据进行一个迭代求和算平均值。代码如下:

import numpy as np

def computer_error_for_line_points(b,w,points):

    totalError = 0

    for i in range(0,len(points)):

        x = points[i][0]

        y = points[i][1]

        totalError += ((w * x + b) - y) ** 2

    return totalError / float(len(points))

(2)初始化bw的值,通过对bw求偏导来对bw进行迭代更新。代码如下:

def step_gradient(b_current,w_current,points,learningRate):

    b_gradient = 0

    w_gradient = 0

    N = float(len(points))

    for i in range(0,len(points)):

        x = points[i][0]

        y = points[i][1]

        b_gradient += (2/N) * ((w_current * x + b_current) - y)

        w_gradient += (2/N) * x * ((w_current * x + b_current) - y)

    new_b = b_current - (learningRate * b_gradient)

    new_w = w_current - (learningRate * w_gradient)

    return [new_b,new_w]

3重复将新的b、w的值赋值给b、w,多次循环最终返回一个最优的bw值。代码如下:

def gradient_descent_runner(points,starting_b,starting_w,learning_rate,num_iterations):

    b = starting_b

    w = starting_w

    for i in range(num_iterations):

        b,w = step_gradient(b,w,np.array(points),learning_rate)

    return [b,w]

4)最后,定义一个运行方法。(注:在做模型演算时,往往会先将数据处理成矩阵,一般将矩阵存储为一个.csv文件,放在与.py文件同一级文件夹下。在使用时类似points = np.genfromtxt('data.csv',delimiter=",")进行文件读取。)代码如下:

def run():

    points = np.genfromtxt('data.csv',delimiter=",")

    learning_rate = 0.0001

    initial_b = 0

    initial_w = 0

    num_iterations =1000

    print('Starting gradient descent at b = {0},w = {1},error = {2}'.format(initial_b,initial_w,computer_error_for_line_points(initial_b,initial_w,points)))

    print('Running...')

    [b,w] = gradient_descent_runner(points,initial_b,initial_w,learning_rate,num_iterations)

    print('After {0} iterations b = {1},w = {2},error = {3}'.format(num_iterations,b,w,computer_error_for_line_points(b,w,points)))

4 运行结果

运行之后,得到的b、w就是最优解。

图2 运行结果

结语

通过这样一个简单的线性回归问题,可以初步感受到借助python语言来解决一个数据分析处理的问题的便携性和功能性是十分强大的。不仅如此,在面对其他更为复杂的数学分析问题,利用编程和建立数学模型来解决会十分方便和高效。


目录
相关文章
|
22天前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
47 3
|
2月前
|
机器学习/深度学习 数据可视化 Python
使用最小二乘法进行线性回归(Python)
【10月更文挑战第28天】本文介绍了使用Python实现最小二乘法进行线性回归的步骤,包括数据准备、计算均值、计算斜率和截距、构建线性回归方程以及预测和可视化结果。通过示例代码展示了如何从创建数据点到最终绘制回归直线的完整过程。
|
2月前
|
机器学习/深度学习 算法 Python
使用Python实现简单的线性回归模型
【10月更文挑战第2天】使用Python实现简单的线性回归模型
27 1
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现简单的线性回归模型
【10月更文挑战第2天】使用Python实现简单的线性回归模型
36 0
|
3月前
|
算法 Python
揭秘!Python数据魔术师如何玩转线性回归,让你的预测精准到不可思议
【9月更文挑战第13天】在数据科学领域,线性回归以其优雅而强大的特性,将复杂的数据关系转化为精准的预测模型。本文将揭秘Python数据魔术师如何利用这一统计方法,实现令人惊叹的预测精度。线性回归假设自变量与因变量间存在线性关系,通过拟合直线或超平面进行预测。Python的scikit-learn库提供了简便的LinearRegression类,使模型构建、训练和预测变得简单直接。
55 5
|
3月前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
55 5
|
4月前
|
机器学习/深度学习 数据采集 Python
利用Python实现简单的线性回归模型
【8月更文挑战第29天】本文将引导你了解并实践如何使用Python编程语言实现一个简单的线性回归模型。我们将通过一个实际的数据集,一步步地展示如何进行数据预处理、建立模型、训练及评估模型性能。文章旨在为初学者提供一个易于理解且实用的编程指南,帮助他们快速入门机器学习领域。
|
4月前
|
机器学习/深度学习 算法 Python
Python中实现简单的线性回归模型
【8月更文挑战第31天】本文将通过Python编程语言,介绍如何实现一个简单的线性回归模型。我们将从理论出发,逐步深入到代码实现,最后通过实例验证模型的有效性。无论你是初学者还是有一定编程基础的读者,都能从中获得启发和收获。让我们一起探索线性回归的世界吧!
|
4月前
|
数据可视化 Python
“数据科学家必备!线性回归:Python中的简单武器,打造复杂预测模型
【8月更文挑战第2天】线性回归是数据科学中简单而强大的工具,用于预测自变量与因变量间的关系。在Python中可通过scikit-learn轻松实现。步骤包括:导入库、准备数据(使用`numpy`生成模拟数据并划分训练集/测试集)、创建并训练模型(使用`LinearRegression`类)、及评估模型与预测(计算均方误差并可视化结果)。掌握线性回归是理解和解决复杂预测问题的基础。
44 2
|
4月前
|
存储 算法 定位技术
预见未来?Python线性回归算法:数据中的秘密预言家
【8月更文挑战第3天】站在数据的海洋边,线性回归算法犹如智慧的预言家,揭示着房价的秘密。作为房地产投资者,面对复杂的市场,我们可通过收集房屋面积、位置等数据并利用Python的pandas及scikit-learn库,建立线性回归模型预测房价。通过评估模型的均方根误差(RMSE),我们可以更精准地判断投资时机,让数据引领我们走向成功的彼岸。
26 1