线性回归从零开始的实现过程python实现

简介: 线性回归从零开始的实现过程python实现

代码具体实现如下:

from IPython import display
from matplotlib import pyplot as plt
import torch
import numpy as np
from mxnet import autograd,nd
import random
import matplotlib_inline
num_inputs = 2
num_examples = 1000
true_w = [2,-3.4]
true_b = 4.2
features = nd.random.normal(scale=1, shape=(num_examples,num_inputs))
labels = true_w[0] * features[:,0] + true_w[1] * features[:,1] + true_b
labels += nd.random.normal(scale = 0.01,shape=labels.shape)
print(features[0])
print(labels[0])
def use_svg_display():
#    display.set_matplotlib_formats('svg')
    matplotlib_inline.backend_inline.set_matplotlib_formats('svg')
def set_figsize(figsize=(3.5,2.5)):
    use_svg_display()
    plt.rcParams['figure.figsize']=figsize
set_figsize()
plt.scatter(features[:,1].asnumpy(),labels.asnumpy(),1)
#plt.show()
def data_iter(batch_size,features,labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    random.shuffle(indices)
    for i in range(0, num_examples,batch_size):
       j = nd.array(indices[i:min(i + batch_size, num_examples)])
       yield features.take(j), labels.take(j)
batch_size = 10
for x,y in data_iter(batch_size,features,labels):
    print(x,y)
    break;
w = nd.random.normal(scale=0.01, shape=(num_inputs,1))
b = nd.zeros(shape=(1,))
w.attach_grad()
b.attach_grad()
print(w)
print(b)
def linreg(x,w,b):
    return nd.dot(x,w)+b
def squared_loss(y_hat,y):
    return (y_hat - y.reshape(y_hat.shape))**2/2
def sgd(params,lr,batch_size):
    for param in params:
        param = param -lr*param.grad/batch_size
#        param[:] = param - lr * param.grad / batch_size
lr = 0.03
num_epochs = 3
net = linreg
loss = squared_loss
for epoch in range(num_epochs):
    for x,y in data_iter(batch_size, features, labels):
        with autograd.record():
            l = loss(net(x,w,b),y)
            l.backward()
            sgd([w,b],lr,batch_size)
            train_l = loss(net(features,w,b),labels)
            print('epoch %d, loss %f' %(epoch+1, train_l.mean().asnumpy()))
print(true_w,w)
print(true_b,b)
print(l)

执行效果如下:

感兴趣的可以试试。

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