机器学习二

news/2024/9/21 10:35:42

文章目录

  • 线性回归

线性回归

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

# -*- coding = utf-8 -*-
# @Author : 墙缝里的草
# @File : demo1004.py
# @Software : PyCharmimport numpy as np
import random
# 线性回归 的函数构造
'''
input_data   训练数据集
realresult   训练结果集
theta   参数'''# 线性回归函数
def _init_(self,input_data,realresult,theta=None):''':param self::param input_data: 输入数据:param realresult:  真实数据:param theta: 线性回归参数,默认为None:return:'''#     获得输入数据集的形状row,col=np.shape(input_data)#构造输出数据组self.InputData=[0]*row#给每组数据添加常数项1for(index,data)in enumerate(input_data):Data=[1.0]#把input_data扩展到Data内,把input_data的每一i组数据添加放到DataData.extend(list(data))self.InputData[index]=Dataself.InputData=np.array(self.InputData)self.Result=realresult#参数theta不为None时,利用theta构造模型函数if theat is not None:self.Theta=thetaelse:#随机生成服从标准正态分布的函数sel .Theta=np.random.normal((col+1,1))# 梯度下降算法函数
def BGD(self,alpha):'''利用BGD算法进行一次迭代调整参数的函数:param self::param alpha: 学习率:return:'''#定义梯度增量数组gradient_increasment=[]#对其输入的数据机器真是结果进行依次遍历for (input_data,real_result) in zip(self.InputData,self.Result):#计算每组input_data的梯度增量,并放入梯度增量数组g=(real_result-input_data.dot(self.Theta))*input_datagradient_increasment.append(g)#按列计算属性的平均梯度增量avg_g=np.average(gradient_increasment,0)#改变平均梯度增量数组形状avg_g=avg_g.reshape((len(avg_g),1))#更新模型参数 self.Thetaself.Theta=self.Theta+alpha*avg_g# 随机梯度下降算法函数
def SGD(self,alpha):'''利用SGD算法进行一次迭代调整参数的函数:param self::param alpha:学习率:return:'''#首先将数据集随机打乱,减少数据集顺序对参数调优的影像shuffle_sequence=self.Shuffle_Squence()self.InputData=self.InputData[shuffle_sequence]self_Resule=self.Result[shuffle_sequence]#对训练数据集进行遍历,利用每组数据对参数进行调整for(input_data,real_result) in zip(self.InputData,self_Resule):#计算每组input_data的梯度增量g=(real_result-input_data.dot(self.Theta))*input_data#调整每组input_data的梯度增量的形状g=g.reshape((len(g),1))#更新参数模型self_Theta=self_Theta+alpha.g#小批量梯度下降算法函数
def MBGD(self,alpha,batch_size):'''利用MBGD算法进行一次迭代调整参数的函数:param self::param alpha::param batch_size::return:'''#首先将数据集随机打乱,减少数据集顺序对参数调优的影响shuffle_sequence=self.Shuffle_Squence()self.InputData=self.InputData[shuffle_sequence]self.Result=self.Result[shuffle_sequence]#遍历每个小批量样本for start in np.arange(0,len(shuffle_sequence),batch_size):#判断start+batch_size是否大于数组长度#防止最后一组小批量杨副本规模可能小于batch_size的情况end=np.min([start+batch_size,len(shuffle_sequence)])#获取训练小批量样本集及其标签mini_batch=shuffle_sequence[start:end]Mini_Train_Data=self.InputData[mini_batch]Mini_Train_Result=self.Result[mini_batch]#定义梯度增量数组gradient_increasement=[]#对小样本训练集进行遍历,利用每个小样本的梯度增量的平均值对模型参数进行更新for (data,result) in zip(Mini_Train_Data,Mini_Train_Result):#计算每组input_data的梯度增量,并放入梯度增量数组g=(result-data.dot(self,Theta))*datagradient_increasement.append(g)#按列计算每组小样本训练集的梯度增量的平均值,并改变其形状avg_g=np.average(gradient_increasement,0)avg_g=avg_g.reshape((len(avg_g),1))#更新 模型参数self.Theta=self.Theta+alpha*avg_g'''
迭代训练函数
'''
def train_BGD(self,iter,alpha):'''利用BGD算法迭代优化的函数:param self::param iter: 迭代次数:param alpha:   优化率:return:'''#定义平均 训练损失数组,记录每轮迭代的训练数组集的损失Cost=[]#开始训练进行迭代for i in range(iter):#利用学习率alpha,结合BGD算法模型进行训练self.BGD(alpha)#记录每次迭代的平均损失Cost.append(self.Cost())Cost=np.array(Cost)return Costdef train_SGD(self,iter,alpha):'''利用SGD算法迭代优化的函数:param self::param iter::param alpha::return:'''# 定义平均 训练损失数组,记录每轮迭代的训练数组集的损失Cost = []# 开始训练进行迭代for i in range(iter):# 利用学习率alpha,结合SGD算法模型进行训练self.SGD(alpha)# 记录每次迭代的平均损失Cost.append(self.Cost())Cost = np.array(Cost)return Costdef train_MBGD(self,iter,batch_size,alpha):'''利用MBGD算法迭代优化的函数:param self::param iter::param batch_size::param alpha::return:'''# 定义平均 训练损失数组,记录每轮迭代的训练数组集的损失Cost = []# 开始训练进行迭代for i in range(iter):# 利用学习率alpha,结合MBGD算法模型进行训练self.MBGD(alpha)# 记录每次迭代的平均损失Cost.append(self.Cost())Cost = np.array(Cost)return Cost'''
正则方程函数
'''def getNormalEquation(self):'''利用正则方程计算模型参数self.Theta:param self::return:'''# 0.001*np.eye(np.shape(self.InputData.T))是防止出现原始XT的行列式为0,即防止原始XT不可逆#获取输入数据数组形式col,rol=np.shape(self.InputData.T)#计算输入数据矩阵的转置XT=self.InputData.T+0.001*np.eye(col,rol)#
# -*- coding = utf-8 -*-
# @Author : 墙缝里的草
# @File : demo1.py
# @Software : PyCharmimport numpy as np
def  _init_(self,train_data,train_result):''':param self::param train_data: 输入训练数据:param train_result:  训练数据真实结果:return:'''#获得输入数据集的形状row,col=np.shape(train_data)#构造输入数据数组self.Train_Data=[0]*row#给每组输入数据增添常数项1for(index,data) in enumerate(train_data):Data=[1.0]#把每组data扩展到Data内Data.extend(list(data))self.Train_Data[index]=Dataself.Train_Data=np.array(self.Train_Data)
#构造输入数据对应的结果self.Train_Result=train_result
#定义数据权重self.weight=np.zeros((row,row))#定义局部加权线性回归的模型参数self.Theta=[]def Gaussian_Weight(self,data,k):'''计算测试权重的函数:param self::param data:   输入数据:param k:   带宽系数:return:'''#data类型数据是np.array,则利用dot方法#惊醒矩阵运算的结果是矩阵,只有一个元素也是sum=np.sum(data*data)return np.exe(sum/(-2.0*k**2))

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

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

相关文章

与ObjectDataSource共舞

4,ORM组件XCode(与ObjectDataSource共舞) XCode为了能更方便的解决大部分问题,不得不“屈身”于ObjectDataSource。 先上一个经典例子(ObjectDataSourceGridView)(ObjectDataSource)…

size mismatch for roi_heads.box_predictor.cls_score.weight: copying a param with shape torch.Size([9

1. 报错 RuntimeError: Error(s) in loading state_dict for FasterRCNN: size mismatch for roi_heads.box_predictor.cls_score.weight: copying a param with shape torch.Size([91, 1024]) from checkpoint, the shape in current model is torch.Size([80, 1024]). pytor…

数据结构--队列

文章目录队列队列存储结构特点队列的相关概念:队列的操作:队列的分类:数组实现链表实现队列 队列存储结构特点 (1)队列中的数据元素遵循“先进先出”的原则 (2)在队尾添加元素,在队…

文件服务器共享目录设置(二)

三、 设置磁盘配额及文件屏蔽 为了防止用户无限制的上传文件,或上传病毒木马等文件,还需要进一步加强安全设置。用磁盘配额来管理用户的文件夹空间,用文件屏蔽来阻止用户上传有风险的文件。 在win2003中,磁盘配额只能…

机器学习--局部加权线性回归

文章目录局部加权线性回归预测鲍鱼年龄局部加权线性回归 具体理论见上次笔记《线性回归》 预测鲍鱼年龄 import numpy as npclass LocalWeightedLinearRegression(object):def __init__(self,train_data,train_result):""":param train_data: 输入训练数据:p…

Standup Timer的MVC模式及项目结构分析

前言 学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的Standup …

JAVA IDEA切换新机器配置环境一览

1. 装jdk 自动配置环境变量 2. idea配置git git config --global user.name "xxx" git config --global user.email "xxxxx.com"3. idea配置maven 解压apache-maven-xxx.jar,配置环境变量MAVEN_HOME,PATH增加%MAVEN_HOME%\bin settings.xml…

数据结构--串

文章目录串串的基本概念串的基本操作代码实现串 串的基本概念 长度:串中字符的个数,称为串的长度。 空串:长度为零的字符串称为空串。 空格串:由一个或多个连续空格组成的串称为空格串。 串相等:两个串相等&#xff…