线性回归从零开始的实现过程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)

执行效果如下:

感兴趣的可以试试。

相关文章
|
22天前
|
机器学习/深度学习 数据可视化 安全
Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化(下)
Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化
|
22天前
|
机器学习/深度学习 数据可视化 Python
Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化(上)
Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化
|
9天前
|
机器学习/深度学习 Python
利用Python实现一个简单的机器学习模型:线性回归详解
利用Python实现一个简单的机器学习模型:线性回归详解
27 2
|
20天前
|
数据采集 数据挖掘 Python
Python数据分析 | 线性回归
Python数据分析 | 线性回归
39 1
|
22天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】Python 中的线性回归模型详解
【4月更文挑战第30天】本文介绍了Python中的线性回归模型,包括基本原理、实现步骤和应用。线性回归假设因变量与自变量间存在线性关系,通过建立数学模型进行预测。实现过程涉及数据准备、模型构建、参数估计、评估和预测。常用的Python库有Scikit-learn和Statsmodels。线性回归简单易懂,广泛应用,但对异常值敏感且假设线性关系。其扩展形式如多元线性、多项式回归和正则化方法能适应不同场景。理解并运用线性回归有助于数据分析和预测。
|
22天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
|
22天前
|
数据可视化 Python
请解释Python中的线性回归分析以及如何使用Sklearn库实现它。
【4月更文挑战第22天】使用Python的Sklearn库进行线性回归分析,包括7个步骤:导入库、准备数据、划分训练测试集、创建模型、训练、预测和评估。示例代码创建了一个简单的数据集,应用线性回归模型,计算了Mean Squared Error和R² Score,并展示了预测结果与实际值的可视化对比。
29 11
|
22天前
|
机器学习/深度学习 Python
Python用PyMC3实现贝叶斯线性回归模型
Python用PyMC3实现贝叶斯线性回归模型
|
22天前
|
索引 Python
python用线性回归预测股票价格
python用线性回归预测股票价格
|
22天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析