【机器学习Python实战】线性回归

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:机器学习python实战 欢迎订阅!后面的内容会越来越有意思~
内容说明:本专栏主要针对机器学习专栏的基础内容进行python的实现,部分基础知识不再讲解,有需要的可以点击专栏自取~
💡往期推荐(机器学习基础专栏)
【机器学习基础】机器学习入门(1)
【机器学习基础】机器学习入门(2)
【机器学习基础】机器学习的基本术语
【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)
【机器学习基础】一元线性回归(适合初学者的保姆级文章)
【机器学习基础】多元线性回归(适合初学者的保姆级文章)
本期内容:针对以上的一元和多元线性回归的梯度下降求解方法,进行代码展示


文章目录

  • 一元线性回归
  • 多元线性回归


一元线性回归

  • 设计思路

首先,class LinearRegression(object):定义一个LinearRegression类,继承自object类。
在这个类中,首先def __init__(self):定义类的构造函数

在构造函数中,初始化线性回归模型的参数self.__Mself.__theta0self.__theta1,以及梯度下降中的步长(学习率)self.__alpha

在这里插入图片描述

线性回归模型是要不断计算输出的,所以定义函数def predict(self, x),用于预测给定输入x对应的输出

同时线性回归的目的是通过迭代,不断的修改参数 θ \theta θ,所以需要定义函数用来做这个工作,它是通过梯度下降的方法来求解的,所以def __cost_theta0(self, X, Y)def __cost_theta1(self, X, Y)这两个方法用于计算代价函数关于参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1的偏导数

下面,def train(self, features, target)把上面的每个步骤和到了一起,定义了一个训练方法train,用于通过梯度下降算法找到最优的模型参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1,使得代价函数的平方误差最小。在训练过程中,通过迭代更新参数,并输出每次迭代后的参数值

while的每一次迭代中,通过更新参数self.__theta0self.__theta1来逐渐最小化代价函数的平方误差。

if "0:o.5f".format(prevt0) == "0:o.5f".format(self.__theta0) and "0:o.5f".format(prevt1) == "0:o.5f".format(self.__theta1):判断是否达到收敛条件,即两次迭代的参数值没有改变,如果满足条件,则退出循环。

最后,输出最终得到的参数值。

在这里插入图片描述

  • 总体代码实现

定义LinearRegression的class

#!/usr/bin/env python3
# 这是一个Shebang,指定了此脚本要使用的解释器为python3。
import numpy

class LinearRegression(object):

    # Constructor. Initailize Constants.
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.__M = 0
        self.__theta0 = 2
        self.__theta1 = 2

        # defining Alpha I.E length of steps in gradient descent Or learning Rate.
        self.__alpha = 0.01

    def predict(self,x):
        return (self.__theta0 + x * self.__theta1)
    
    # Cost Function fot theta0.
    def __cost_theta0(self,X,Y):
        
        sqrerror = 0.0
        for i in range(0,X.__len__()):
            sqrerror += (self.predict(X[i]) - Y[i])
        return (1/self.__M * sqrerror)
    
    # Cost Function fot theta1.
    def __cost_theta1(self,X,Y):
        sqrerror = 0.0
        for i in range(0,X.__len__()):
            sqrerror += (self.predict(X[i]) - Y[i]) * X[i]
        return (1/self.__M * sqrerror)


    # training Data :
    # Finding Best __theta0 and __theta1 for data such that the Squared  Error is Minimized.
    def train(self,features,target):
        
        # Validate Data
        if not features.__len__() == target.__len__():
            raise Exception("features and target should be of same length")

        # Initailize M with Size of X and Y
        self.__M = features.__len__()
        
        # gradient descent
        prevt0, prevt1 = self.__theta0 , self.__theta1
        
        while True:
            tmp0 = self.__theta0 - self.__alpha * (self.__cost_theta0(features,target))
            tmp1 = self.__theta1 - self.__alpha * (self.__cost_theta1(features,target))
           
            self.__theta0, self.__theta1 = tmp0, tmp1

            print("theta0(b) :", self.__theta0)
            print("theta1(m) :", self.__theta1)

            if "0:o.5f".format(prevt0) == "0:o.5f".format(self.__theta0) and "0:o.5f".format(prevt1) == "0:o.5f".format(self.__theta1):
                break
            
            prevt0, prevt1 = self.__theta0 , self.__theta1


        # Training Completed.
        # log __theta0 __theta1
        print("theta0(b) :", self.__theta0)
        print("theta1(m) :", self.__theta1)

样例测试

from LinearRegression_OneVariables import LinearRegression
import numpy as np

X = np.array([1,2,3,4,5,6,7,8,9,10])

# Y = 0 + 1X
Y = np.array([1,2,3,4,5,6,7,8,9,10])

modal = LinearRegression.LinearRegression()

modal.train(X,Y)

print(modal.predict(14))


多元线性回归

  • 设计思路

首先,将文件导入,打乱顺序并选择训练集。

data=pd.read_csv("c:\\windquality.csv")

data_array=data.values

#shuffling for train test spplit
np.random.shuffle(data_array)

train,test=data_array[:1200,:],data_array[1200:,:]
x_train=train[:,:-1]
x_test=test[:,:-1]
y_train=train[:,-1]
y_test=test[:,-1]

在这里插入图片描述

然后初始化参数,注意这里是多元的,所以有多个参数需要初始化。包括迭代次数和学习率

coef1=0
coef2=0
coef3=0
coef4=0
coef5=0
coef6=0
coef7=0
coef8=0
coef9=0
coef10=0
coef11=0
epoch=1000
alpha=.0001

在这里插入图片描述

然后使用梯度下降算法进行计算

总体代码实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


data=pd.read_csv("c:\\windquality.csv")

data_array=data.values

#shuffling for train test spplit
np.random.shuffle(data_array)

train,test=data_array[:1200,:],data_array[1200:,:]
x_train=train[:,:-1]
x_test=test[:,:-1]
y_train=train[:,-1]
y_test=test[:,-1]

coef1=0
coef2=0
coef3=0
coef4=0
coef5=0
coef6=0
coef7=0
coef8=0
coef9=0
coef10=0
coef11=0
epoch=1000
alpha=.0001
c=0
n=len(y_train)
for i in range(epoch):
    y_pred=((coef1*x_train[:,0])+(coef2*x_train[:,1])+(coef3*x_train[:,2])+(coef4*x_train[:,3])+
            (coef5*x_train[:,4])+(coef6*x_train[:,5])+(coef7*x_train[:,6])+(coef8*x_train[:,7])+
            (coef9*x_train[:,8])+(coef10*x_train[:,9])+(coef11*x_train[:,10])+c)
    
    
    #to predict drivative
    intercept=(-1/n)*sum(y_train-y_pred)
    dev1=(-1/n)*sum(x_train[:,0]*(y_train-y_pred))
    dev2=(-1/n)*sum(x_train[:,1]*(y_train-y_pred))
    dev3=(-1/n)*sum(x_train[:,2]*(y_train-y_pred))
    dev4=(-1/n)*sum(x_train[:,3]*(y_train-y_pred))
    dev5=(-1/n)*sum(x_train[:,4]*(y_train-y_pred))
    dev6=(-1/n)*sum(x_train[:,5]*(y_train-y_pred))
    dev7=(-1/n)*sum(x_train[:,6]*(y_train-y_pred))
    dev8=(-1/n)*sum(x_train[:,7]*(y_train-y_pred))
    dev9=(-1/n)*sum(x_train[:,8]*(y_train-y_pred))
    dev10=-1/n*sum(x_train[:,9]*(y_train-y_pred))
    dev11=-1/n*sum(x_train[:,10]*(y_train-y_pred))
    
    
    #line
    
    c=c-alpha*intercept
    coef1=coef1-alpha*dev1
    coef2=coef2-alpha*dev2
    coef3=coef3-alpha*dev3
    coef4=coef4-alpha*dev4
    coef5=coef5-alpha*dev5
    coef6=coef6-alpha*dev6
    coef7=coef7-alpha*dev7
    coef8=coef8-alpha*dev8
    coef9=coef9-alpha*dev9
    coef10=coef10-alpha*dev10
    coef11=coef11-alpha*dev11
    
    
print("\nintercept:",c,"\ncoefficient1:",coef1,"\ncoefficient2:",coef2,"\ncoefficient3:",coef3,"\ncoefficient4:",coef4,
      "\ncoefficient5:",coef5,"\ncoefficient6:",coef6,"\ncoefficient7:",coef7,"\ncoefficient8:",coef8,"\ncoefficient9:",coef9,
      "\ncoefficient10",coef10,   "\ncoefficient11",coef11)
    
    

#Calculating the predicted values
predicted_values = []
for i in range(0,399):
    y_pred = ((coef1 * x_test[i,0]) + (coef2 * x_test[i,1]) + 
              (coef3 * x_test[i,2]) + (coef4 * x_test[i,3]) + 
              (coef5 * x_test[i,4]) + (coef6 * x_test[i,5]) + 
              (coef7 * x_test[i,6]) + (coef8 * x_test[i,7]) + 
              (coef9 * x_test[i,8]) + (coef10 * x_test[i,9]) + 
              (coef11 * x_test[i,10]) + intercept)
    predicted_values.append(y_pred)
    
for i in range(len(predicted_values)):
    print(predicted_values[i])

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

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

相关文章

ThinkPHP 系列漏洞

目录 2、thinkphp5 sql注入2 3、thinkphp5 sql注入3 4、 thinkphp5 SQL注入4 5、 thinkphp5 sql注入5 6、 thinkphp5 sql注入6 7、thinkphp5 文件包含漏洞 8、ThinkPHP5 RCE 1 9、ThinkPHP5 RCE 2 10、ThinkPHP5 rce3 11、ThinkPHP 5.0.X 反序列化漏洞 12、ThinkPHP…

字符串函数详解

一.字母大小写转换函数. 1.1.tolower 结合cppreference.com 有以下结论&#xff1a; 1.头文件为#include <ctype.h> 2.使用规则为 #include <stdio.h> #include <ctype.h> int main() {char ch A;printf("%c\n",tolower(ch));//大写转换为小…

vscode编写verilog的插件【对齐、自动生成testbench文件】

vscode编写verilog的插件&#xff1a; 插件名称&#xff1a;verilog_testbench,用于自动生成激励文件 安装教程&#xff1a;基于VS Code的Testbench文件自动生成方法——基于VS Code的Verilog编写环境搭建SP_哔哩哔哩_bilibili 优化的方法&#xff1a;https://blog.csdn.net…

数据结构与算法-哈夫曼树与图

&#x1f31e; “永远积极向上&#xff0c;永远豪情满怀&#xff0c;永远热泪盈眶&#xff01;” 哈夫曼树与图 &#x1f388;1.哈夫曼树&#x1f52d;1.1树与二叉树的转换&#x1f52d;1.2森林与二叉树的转换&#x1f52d;1.3哈夫曼树&#x1f50e;1.3.1哈夫曼树的概念&#x…

Web之CSS笔记

Web之HTML、CSS、JS 二、CSS&#xff08;Cascading Style Sheets层叠样式表&#xff09;CSS与HTML的结合方式CSS选择器CSS基本属性CSS伪类DIVCSS轮廓CSS边框盒子模型CSS定位 Web之HTML笔记 二、CSS&#xff08;Cascading Style Sheets层叠样式表&#xff09; Css是种格式化网…

传输层——TCP协议

文章目录 一.TCP协议二.TCP协议格式1.序号与确认序号2.窗口大小3.六个标志位 三.确认应答机制&#xff08;ACK&#xff09;四.超时重传机制五.连接管理机制1.三次握手2.四次挥手 六.流量控制七.滑动窗口八.拥塞控制九.延迟应答十.捎带应答十一.面向字节流十二.粘包问题十三.TCP…

【有源码】基于asp.net的旅游度假村管理系统C#度假村美食住宿一体化平台源码调试 开题 lw ppt

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

OpenAI 解雇了首席执行官 Sam Altman

Sam Altman 已被 OpenAI 解雇&#xff0c;原因是担心他与董事会的沟通和透明度&#xff0c;可能会影响公司的发展。该公司首席技术官 Mira Murati 将担任临时首席执行官&#xff0c;但 OpenAI 可能会从科技行业寻找新的首席执行官来领导未来的产品开发。Altman 的解雇给 OpenAI…

YOLOv8优化与量化(1000+ FPS性能)

YOLO家族又添新成员了&#xff01;作为目标检测领域著名的模型家族&#xff0c;you only look once (YOLO) 推 出新模型的速度可谓是越来越快。就在刚刚过去的1月份&#xff0c;YOLO又推出了最新的YOLOv8模型&#xff0c;其模型结构和架构上的创新以及所提供的性能提升&#xf…

电子电器架构 —— 车载网关边缘节点路由转发策略

电子电器架构 —— 车载网关边缘节点路由转发策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数5000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无…

035、目标检测-物体和数据集

之——物体检测和数据集 目录 之——物体检测和数据集 杂谈 正文 1.目标检测 2.目标检测数据集 3.目标检测和边界框 4.目标检测数据集示例 杂谈 目标检测是计算机视觉中应用最为广泛的&#xff0c;之前所研究的图片分类等都需要基于目标检测完成。 在图像分类任务中&am…

动手学深度学习——循环神经网络的从零开始实现(原理解释+代码详解)

文章目录 循环神经网络的从零开始实现1. 独热编码2. 初始化模型参数3. 循环神经网络模型4. 预测5. 梯度裁剪6. 训练 循环神经网络的从零开始实现 从头开始基于循环神经网络实现字符级语言模型。 # 读取数据集 %matplotlib inline import math import torchfrom torch import …

机器学习算法——集成学习

目录 1. Bagging 1. Bagging Bagging&#xff08;bootstrap aggregating&#xff1a;自举汇聚法&#xff09;也叫装袋法&#xff0c;其思想是通过将许多相互独立的学习器的结果进行结合&#xff0c;从而提高整体学习器的泛化能力&#xff0c;是一种并行集成学习方法。 工作流…

计算机msvcp120.dll丢失?msvcp120.dll丢失5种简单的解决方法分享

你们是否在电脑操作过程中常看到一段类似“msvcp120.dll缺失或损坏”的报错信息&#xff1f;这可能会干扰大家的日常应用程序使用&#xff0c;怎么办呢&#xff1f;别担心&#xff0c;接下来就是一篇详细的步骤来教你如何应对这种情况&#xff0c;让你们的电脑运作如初&#xf…

Cadence virtuoso drc lvs pex 无法输入

问题描述&#xff1a;在PEX中的PEX options中 Ground node name 无法输入内容。 在save runset的时候也出现无法输入名称的情况 解决办法&#xff1a; copy一个.bashrc文件到自己的工作目录下 打开.bashrc文件 在.bashrc中加一行代码&#xff1a;unset XMODIFIERS 在终端sour…

无需API开发,伯俊科技实现电商与客服系统的无缝集成

伯俊科技的无代码开发实现系统连接 自1999年成立以来&#xff0c;伯俊科技一直致力于为企业提供全渠道一盘货的服务。凭借其24年的深耕零售行业的经验&#xff0c;伯俊科技推出了一种无需API开发的方法&#xff0c;实现电商系统和客服系统的连接与集成。这种无代码开发的方式不…

【Proteus仿真】【STM32单片机】防火防盗GSM智能家居设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用声光报警模块、LCD1602显示模块、DS18B20温度、烟雾传感器模块、按键模块、PCF8591 ADC模块、红外检测模块等。 主要功能&#xff1a; 系统运行…

Linux--初识和几个简单的指令(1)

目录 前言 0.什么是操作系统 0.1 搭建 Linux 环境 0.2搭建 Linux 环境小结 1.使用 XShell 远程登录 Linux 1.1关于 Linux 桌面 1.2下载安装 XShell 1.3查看 Linux 主机 ip 1.4XShell 下的复制粘贴 2.Linux下基本指令 2.1 pwd命令 2.2 ls命令 2.3 mkdir指令 2.4 cd…

vue2项目封装axios(vite打包)

1.安装 npm i axios 2.封装axios 说明&#xff1a;request.js文件 //对axios进行二次封装 import axios from "axios" import "nprogress/nprogress.css"// 当前模块中引入store // import store from "/store"// 引入进度条import nprogress f…

【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )

文章目录 一、类模板1、类模板引入2、声明类模板语法3、调用类模板语法 二、代码示例 - 类模板1、代码示例2、执行结果 一、类模板 1、类模板引入 类模板 与 函数模板 的 作用类似 , 当 多个类 功能相同 , 只是数据类型不同 , 此时可以 定义一个类模板 代替 定义多个类 ; 借助…