Python-sklearn-LinearRegression

目录

1 手动实现/使用sklearn实现线性回归训练

1.1 单特征线性回归(One Feature)

1.2 多特征线性回归(Multiple Features)

1.3 多项式线性回归(Polynomial)


1 手动实现/使用sklearn实现线性回归训练

1.1 单特征线性回归(One Feature)

假设函数(One feature):

h(x^{i}) = w * x^{i} + b

损失函数(平方差损失MSE):

J(w, b) = \frac{1}{2m}\sum_{i=1}^{m}(h(x^{i}) - y^{i})^{2}

优化器(梯度下降Gradient descent):

w: = w - \alpha \frac{\partial }{\partial w}J(w, b) = w - \alpha \frac{1}{m}\sum_{i=1}^{m}[(h(x^{i}) - y^{i}) * x^{i}]

b: = b - \alpha \frac{\partial }{\partial b}J(w, b) = b - \alpha \frac{1}{m}\sum_{i=1}^{m}(h(x^{i}) - y^{i})

"""
@Title: linear_regression_with_one_feature
@Time: 2024/2/29
@Author: Michael Jie
"""

import random

import numpy as np
from sklearn.linear_model import LinearRegression

print("--------------------手动实现LinearRegression--------------------")
# 数据集,y = 2.7 * x + 1.9
x = np.random.uniform(-3, 3, (100, 1))
y = 2.7 * x + 1.9 + np.random.normal(0, 0.5, (100, 1))
m = len(x)

# 初始化训练参数
w, b = random.random(), random.random()
# 定义最小损失,学习率,最大训练轮次
epsilon, alpha, max_iter = 1e-4, 1e-2, 1e4

# 训练
num = 0  # 训练轮次
j_init = 0  # 用于计算两次训练损失的差值
while True:
    # 假设函数,单特征线性回归
    h = w * x + b
    # 损失,平方差损失函数
    j = 1 / (2 * m) * np.sum((h - y) ** 2)
    if abs(j - j_init) < epsilon or num > max_iter:
        break
    # 优化器,梯度下降
    w -= alpha * (1 / m * np.sum((h - y) * x))
    b -= alpha * (1 / m * np.sum(h - y))
    num += 1
    j_init = j
    if num % 100 == 0:
        print("第{num}次训练,损失为:{j}".format(num=num, j=j))
print("训练后参数为:({w}, {b})".format(w=w, b=b))
# 预测
print("输入10的预测值为:{y}".format(y=w * 10 + b))

print("--------------------使用sklearn实现LinearRegression--------------------")
linear = LinearRegression()
linear.fit(x, y)
print("训练后参数为:({w}, {b})".format(w=linear.coef_, b=linear.intercept_))
print("输入10的预测值为:{y}".format(y=linear.predict(np.array([[10]]))))

"""
--------------------手动实现LinearRegression--------------------
第100次训练,损失为:0.24785011069810353
第200次训练,损失为:0.12133612402719189
训练后参数为:(2.6975988345352375, 1.8337117307000714)
输入10的预测值为:28.809700076052447
--------------------使用sklearn实现LinearRegression--------------------
训练后参数为:([[2.68709722]], [1.93437403])
输入10的预测值为:[[28.80534627]]
"""

1.2 多特征线性回归(Multiple Features)

假设函数(Multiple Features):

h(x) = w_{1} * x_{1} + w_{2} * x_{2} + ... + w_{n} * x_{n} + b = w^{T} * x + b

损失函数(平方差损失MSE):

J(w_{1},w_{2},...,w_{n}, b) = \frac{1}{2m}\sum_{i=1}^{m}(h(x^{i}) - y^{i})^{2}

优化器(梯度下降Gradient descent):

w_{j} := w_{j} - \alpha \frac{\partial }{\partial w_{j}}J(w, b) = w_{j} - \alpha \frac{1}{m}\sum_{i=1}^{m}[(h(x^{i}) - y^{i}) * x_{j}^{i}]

b: = b - \alpha \frac{\partial }{\partial b}J(w, b) = b - \alpha \frac{1}{m}\sum_{i=1}^{m}(h(x^{i}) - y^{i})

"""
@Title: linear_regression_with_multiple_features
@Time: 2024/2/29
@Author: Michael Jie
"""

import random

import numpy as np
from sklearn.linear_model import LinearRegression

print("--------------------手动实现LinearRegression--------------------")
# 数据集,y = 2.1 * x1 + 1.7 * x2 + 4.4
x = np.random.uniform(-3, 3, (100, 2))
y = np.dot(x, np.array([[2.1, 1.7]]).T) + 4.4 + np.random.normal(0, 0.5, (100, 1))
m = len(x)

# 初始化训练参数
w, b = [[random.random(), random.random()]], random.random()
w = np.array(w)
# 定义最小损失,学习率,最大训练轮次
epsilon, alpha, max_iter = 1e-4, 1e-3, 1e4

# 训练
num = 0  # 训练轮次
j_init = 0  # 用于计算两次训练损失的差值
while True:
    # 假设函数,单特征线性回归
    h = np.dot(x, w.T) + b
    # 损失,平方差损失函数
    j = 1 / (2 * m) * np.sum((h - y) ** 2)
    if abs(j - j_init) < epsilon or num > max_iter:
        break
    # 优化器,梯度下降
    w -= alpha * (1 / m * np.sum((h - y) * x))
    b -= alpha * (1 / m * np.sum(h - y))
    num += 1
    j_init = j
    if num % 100 == 0:
        print("第{num}次训练,损失为:{j}".format(num=num, j=j))
print("训练后参数为:({w}, {b})".format(w=w, b=b))
# 预测
print("输入(10, 20)的预测值为:{y}".format(y=np.dot(np.array([[10, 20]]), w.T) + b))

print("--------------------使用sklearn实现LinearRegression--------------------")
linear = LinearRegression()
linear.fit(x, y)
print("训练后参数为:({w}, {b})".format(w=linear.coef_, b=linear.intercept_))
print("输入(10, 20)的预测值为:{y}".format(y=linear.predict(np.array([[10, 20]]))))

"""
--------------------手动实现LinearRegression--------------------
第100次训练,损失为:6.917612630867695
第200次训练,损失为:5.128139537455417
...
第2300次训练,损失为:0.2550961384480396
第2400次训练,损失为:0.2423823553289109
训练后参数为:([[1.92022977 1.85815836]], 4.258528651534591)
输入(10, 20)的预测值为:[[60.62399361]]
--------------------使用sklearn实现LinearRegression--------------------
训练后参数为:([[2.09568973 1.68056098]], [4.45455187])
输入(10, 20)的预测值为:[[59.02266883]]
"""

1.3 多项式线性回归(Polynomial)

"""
@Title: linear_regression_with_polynomial
@Time: 2024/2/29 19:41
@Author: Michael
"""

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 数据集,y = 1.4 * x ** 2 - 3.1 * x + 2.6
x = np.random.uniform(-3, 3, (100, 1))
y = 1.4 * x ** 2 - 3.1 * x + 2.6 + np.random.normal(0, 0.5, (100, 1))

# 预处理数据集,将一元二次函数转化成三元一次函数,然后使用线性回归训练
poly = PolynomialFeatures(degree=2)
poly.fit(x)
x = poly.transform(x)
# 手动实现预处理
degree = np.array([[0, 1, 2]])
# x = x ** degree

# 回归训练
linear = LinearRegression()
linear.fit(x, y)
print("训练后参数为:({w}, {b})".format(w=linear.coef_, b=linear.intercept_))
print("输入10的预测值为:{y}".format(y=linear.predict(np.array([[1, 10, 100]]))))

"""
训练后参数为:([[ 0.         -3.1180901   1.40622675]], [2.62986504])
输入10的预测值为:[[112.07163862]]
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/429186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flutter之终极报错

看到这个报错头都大了 一开始在网上各种搜搜&#xff0c;然后有人说是flutter版本的问题&#xff0c;改完版本之后还是不对&#xff0c;又是各种搜搜搜 有人说是环境变量的问题&#xff0c;后来改了环境变量&#xff0c;妈的&#xff0c;竟然还不行&#xff0c;想砸电脑的心都…

深入浅出RPC原理

远程过程调用(Remote Procedure Call&#xff0c;简称RPC)&#xff0c;在微服务大行其道的今天&#xff0c;得到了广泛的应用。因此&#xff0c;在分布式系统服务群中开发应用&#xff0c;了解RPC一些原理和实现架构&#xff0c;还是很有必要的。本文&#xff0c;将从大的框架层…

js字符串转json的3种方法

1.eval方式解析 function strToJson(str){var json eval("(" str ")");return json;}console.log(strToJson("{int:1, string:demo}")); 运行截图&#xff1a; 注&#xff1a; 记得别忘了str两旁的小括号。 永远不要使用 eval !!! eval() 是一…

华容道问题求解第一部分_详细设计(一)之棋子和游戏类_初始化部分

按&#xff1a;因为自控力和能力的原因&#xff0c;这个其实是在和代码同时进行的。 主要 类 说明 这一层是整个项目的基础&#xff0c;将对未来的算法的效率产生重要影响。为了和界面隔离&#xff0c;以及自身逻辑的清晰&#xff0c;下面的两个类是必须的&#xff0c;棋子类…

42、网络编程/多点通信和域套接字通信模型20240304

一、多点通信之广播的收发端实现 1.广播发送端代码&#xff1a; #include<myhead.h>int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_DGRAM,0);//创建套接字if(sfd-1){perror("socket,error");return -1;}int broadcast1;//设置套接字广…

[计算机网络]:流量控制

一、流量控制简介 一条TCP连接的每一侧主机都为其设置了接收缓存&#xff0c;当TCP成功连接后&#xff0c;它发送的数据会放入接受缓存中。相关联的进程会从缓存中读取数据。但是存在一个问题&#xff0c;当某应用程序读取数据速率太慢&#xff0c;而发送数据一方不停的发送数…

计算机网络 网络原理之Http

目录 1 前言2 什么是http的一次交互&#xff1f;3 理解“协议”二字4 认识URL4.1 简介4.2 URL的编码和解码(urlencode和urldecode) 5 抓包工具 fiddler6 http和https的区别7 http 头8 HTTP 状态码9 常见的 Http 服务器 1 前言 为什么要了解Http原理呢&#xff1f;因为http原理…

Vue.js中的diff算法:让虚拟DOM更高效

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

计算机设计大赛 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

排序算法:插入排序

文章目录 插入排序 插入排序 什么叫插入排序&#xff1f; 也就是把数字从前&#xff0c;或者从最后开始比较然后插入到这个数的前面或者后面&#xff0c;从[0,end]区间插入 void InsertSort(int* a,int n) {for (int i 1; i < n; i){int end i-1;int tmp a[i];while (end…

华为配置基于VLAN限速示例

华为配置基于VLAN限速示例 组网图形 图1 流量监管配置组网图 表1 Switch为上行流量提供的QoS保障 流量类型 CIR(kbps) PIR(kbps) DSCP优先级 语音 2000 10000 46 视频 4000 10000 30 数据 4000 10000 14 ^^^ 流分类简介配置注意事项组网需求配置思路操作步…

实名制交友-智能匹配-仿二狗交友系统-TP6+uni-APP小程序H5公众号-源码交付-支持二开!

一、代码风格 通常不同的开发者具备不同的代码风格&#xff0c;但为了保证语音交友系统开发质量&#xff0c;在编码前需要进行代码风格的统一&#xff0c;通过制定一定的规则&#xff0c;约束开发者的行为。具有统一风格的代码才能更清晰、更完整、更容易理解、更方便后期维护…

【CSS】(浮动定位)易忘知识点汇总

浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标&#xff1a;浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意&#xff1a; 浮动的元素是互相贴靠在一起的&#xff08;不会有缝隙&#xff09;&…

基于机器学习的密码强度检测

项目简介 利用机器学习对提供的数据集预测用户输入的密码是否为弱密码。 原始数据集只包含关于弱密码的信息&#xff0c;并没有包含强密码的数据或分类器&#xff0c;这意味着模型无法学习到强密码的规律!!! 我之所以这样设计这个示例&#xff0c;其目的是为了向你展示模型的…

python统计分析——单变量数据统计作图

参考资料&#xff1a;python统计分析-托马斯 1、导入库和数据准备 # 导入库 # 用于数值处理的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 import matplotlib.pyplot as plt import seaborn as sns sns.set()# 数…

安全特性 悬垂指针

英文名称 Dangling point&#xff0c;它还有一个兄弟叫 wild point - 野指针。 简单的对Dangling point做一个类比&#xff1a;我换手机号码了&#xff0c;但是没有通知老板&#xff0c;老板通讯录存的是我的旧号码。然后老板打电话有两种可能&#xff1a;打不通电话或者电话打…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(十五)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

优化算法之最速梯度下降法、牛顿法、拟牛顿法(DFP及BFGS)

优化算法之最速梯度下降法、牛顿法、拟牛顿法 一、最速梯度下降法 我们知道常规的梯度下降法迭代法公式如下&#xff1a; θ ( k 1 ) θ ( k ) − η ∇ f ( θ ( k ) ) \theta^{(k1)} \theta^{(k)} - \eta\nabla f(\theta^{(k)}) θ(k1)θ(k)−η∇f(θ(k)) 迭代公式中包…

适配Ollama的前端界面Open WebUI

在前文 本地大模型运行框架Ollama 中&#xff0c;老苏留了个尾巴&#xff0c;限于篇幅只是提了一下 Open WebUI&#xff0c;有网友留言说自己安装没搞定&#xff0c;今天我们来补上 文章传送门&#xff1a;本地大模型运行框架Ollama 什么是 Open WebUI &#xff1f; Open WebUI…

LabVIEW眼结膜微血管采集管理系统

LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统&#xff0c;以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能&#xff0c;有效缩短了图像采集时间&#xff0c;提高了图像质量&#…