




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元1任务1.1
机器学习任务1.11.引入相关模块os库是Python标准库,包含几百个函数,常用的是路径操作、进程管理、环境参数类型。os就是“operatingsystem”的缩写,os模块提供的就是各种Python程序与操作系统进行交互的接口。使用os模块,一方面,可以方便地与操作系统qq进行交互;另一方面,可以极大地增强代码的可移植性。NumPy(NumericalPython)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,也针对数组运算提供大量的数学函数库。代码如下:importosimportnumpyasnp类用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。1)重写构造函数2.定义Banknotes类任务1.1classBanknotes:
def__init__(self,feature_dir):
self.feature_dir=feature_dir#特征文件的路径
self.features=None#特征值2)定义加载模型的方法任务1.1defload_model(self):
ifos.path.exists(self.feature_dir):
withopen(self.feature_dir,'r')asf:
line=f.readline().strip()
self.features=np.array(list(map(float,line.split(','))))
returnTrue
else:
path='/'.join(self.feature_dir.split('/')[:-1])
ifnotos.path.exists(path):
os.mkdir('model')
returnFalse04模型训练3)定义加载数据集的方法defload_dataset(self,dataset_path):
ifos.path.exists(dataset_path):#判断数据集文件是否存在
withopen(dataset_path,'r')asf:#打开数据集文件
lines=f.readlines()#按行读取所有数据
np.random.shuffle(lines)#按行打乱顺序
train_inputs=[]#训练数据输入
train_lables=[]#训练数据标签
test_inputs=[]#测试数据输入
test_labels=[]#测试数据标签
forlineinlines[:int(len(lines)*0.8)]:#遍历前80%的数据,将其解析并放入训练集,每行前4个数据作为输入数据,最后1个数据作为标签
line_array=line.strip().split(',')
train_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#数据
train_lables.append(int(line_array[4]))
forlineinlines[int(len(lines)*0.2):]:#遍历后20%的数据,将其解析并放入测试集,每行前4个数据作为输入,最后1个数据作为标签
line_array=line.strip().split(',')
test_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#数据
test_labels.append(int(line_array[4]))
#临时保存训练集和验证集
self.train_dataset,self.test_dataset=[train_inputs,train_lables],[test_inputs,test_labels]04模型训练3)定义加载数据集的方法defload_dataset(self,dataset_path):
ifos.path.exists(dataset_path):#判断数据集文件是否存在
withopen(dataset_path,'r')asf:#打开数据集文件
lines=f.readlines()#按行读取所有数据
np.random.shuffle(lines)#按行打乱顺序
train_inputs=[]#训练数据输入
train_lables=[]#训练数据标签
test_inputs=[]#测试数据输入
test_labels=[]#测试数据标签04模型训练3)定义加载数据集的方法forlineinlines[:int(len(lines)*0.8)]:#遍历前80%的数据,将其解析并放入训练集,每行前4个数据作为输入数据,最后1个数据作为标签
line_array=line.strip().split(',')
train_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#数据
train_lables.append(int(line_array[4]))04模型训练forlineinlines[int(len(lines)*0.2):]:#遍历后20%的数据,将其解析并放入测试集,每行前4个数据作为输入,最后1个数据作为标签
line_array=line.strip().split(',')
test_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#数据
test_labels.append(int(line_array[4]))
#临时保存训练集和验证集
self.train_dataset,self.test_dataset=[train_inputs,train_lables],[test_inputs,test_labels]3)定义加载数据集的方法04模型训练4)定义sigmoid函数/方法sigmoid函数是常见的S型函数,也被称为S型生长曲线,由于其具有单调递增、反函数单调递增等性质,因此其常被用作神经网络的阈值函数,将变量映射到0与1之间。函数的原型为sigmoid函数的图像04模型训练#sigmoid函数即得分函数,用于计算数据x的概率是0还是1。#若得到的y大于0.5,则概率是1;若得到的y小于或等于0.5,则概率是0
defsigmoid(self,x):
return1/(1+np.exp(-x))4)定义sigmoid函数/方法04模型训练5)定义代价函数/方法代价函数,也叫损失函数,它在机器学习的每种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降算法中提到的梯度,为防止过拟合而添加的正则化项也是加在代价函数后面的。#代价函数,hx是概率估计值,也是由sigmoid(x)得来的值;y是样本真值
defcost(self,hx,y):
return-y*np.log(hx)-(1-y)*np.log(1-hx)04模型训练6)定义梯度下降算法微分单变量的微分,函数只有一个变量时多变量的微分,当函数有多个变量的时候,即分别对每个变量进行求微分04模型训练6)定义梯度下降算法梯度实际上就是多变量微分的一般化梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用<>包括起来,说明梯度其实一个向量。在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向04模型训练6)定义梯度下降算法此公式的意义是:J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点。04模型训练6)定义梯度下降算法#梯度下降,x是输入数据,y是标签集,learning_rate是学习率
defgradient(self,x,y,learning_rate):
m=len(y)#计算标签集的长度
matrix_gradient=np.zeros(len(x[0]))#创建一个全0的梯度列表
foriinrange(m):#遍历输入数据与标签集,计算梯度
current_x=x[i]
current_y=y[i]
current_x=np.asarray(current_x)#输入特征转换为Numpy数组,计算预测值(通过sigmoid函数)
matrix_gradient+=(self.sigmoid(np.dot(self.features,current_x))-current_y)*current_x#计算梯度公式(预测值-真实值)*输入特征
self.features=self.features-learning_rate*matrix_gradient#遵循梯度下降原则,更新特征数据04模型训练7)定义误差计算函数
模型的输出结果和其对应的真实值之间往往会存在一些差异,这些差异称为该模型的输出误差,简称误差。误差函数是用来计算实际和预测的差别的。训练误差是指模型在训练集上的平均损失,测试误差是指模型在测试集上的平均损失。训练误差的大小对判断给定的问题是不是一个容易学习的问题具有一定意义,但其本质上不重要。测试误差反映了学习方法对未知的测试集的预测能力,是学习中的重要概念。机器学习在训练模型时,都会把样本集分为训练集和测试集。其中,训练集用来完成算法模型的学习和训练,而测试集用来评估训练好的模型对于数据的预测性能。此时要考虑评估的性能是否合理。04模型训练7)定义误差计算函数#误差计算,x是输入数据,y是标签集,返回平均误差
deferror(self,x,y):
total=len(y)
error_num=0#初始化错误计数变量
foriinrange(total):
current_x=x[i]#将当前样本的特征值赋值给current_x
current_y=y[i]#将当前样本的标签赋值给current_y
hx=self.sigmoid(np.dot(self.features,current_x))#LR算法
ifself.cost(hx,current_y)>0.5:#进一步计算损失
比较损失与阈值0.5的大小,判断是否预测错误
error_num+=1
returnerror_num/total04模型训练8)定义训练函数#训练函数,learning_rate是学习率,num_iter是迭代次数
deftrain(self,learning_rate,num_iter):
[train_inputs,train_lables]=self.train_dataset#获取训练输入数据和标签
n=len(train_inputs[0])
self.features=np.ones(n)#初始化特征值
dataMat=np.asarray(train_inputs)#将输入数据和标签转为numpy数组
labelMat=np.asarray(train_lables)
foriinrange(num_iter+1):
self.gradient(dataMat,labelMat,learning_rate)#梯度下降算法
ifi%10==0:#每10轮计算1次误差,打印当前数据
err=self.error(dataMat,labelMat)
print(f‘迭代次数:{i:<6}误差值:{err:<20}’)
withopen(self.feature_dir,‘w’)asf:#保存特征数据
feature=[str(f)forfinself.features]
f.writelines(','.join(feature))04模型训练8)定义测试函数deftest(self,test_dataset=None,show=False):
[test_inputs,test_labels]=test_dataset
total=len(test_labels)
error_num=0
right_num=0
forti,tlinzip(test_inputs,test_labels):#遍历测试集
#统计测试结果,如果预测值与真值相同,则准确数据+1;如果预测值与真值不同,则错误数据+1
if(np.dot(np.array(ti),self.features.T)<0.5andtl==0)or(np.dot(np.array(ti),self.fea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人 车租用合同范例
- 个体装修合同样本
- 京东授权合同范例
- 2024年精密箱体系统项目资金申请报告代可行性研究报告
- 做美容合伙合同范例
- 清明节经典诗文诵读活动总结模版
- 医疗行业中的区块链与数字货币解决方案
- 公司股权出让合同范例
- 从零开始构建基于区块链的商业信任体系
- 健康产业下的医护职业发展前景
- 公司营销管理体制改革方案
- 七年级语文下册专项练习知识(对联)
- 高考志愿填报指导高考志愿填报指南
- 第7课 珍视亲情 学会感恩(教案)-【中职专用】高一思想政治《心理健康与职业生涯》(高教版2023·基础模块)
- 2024年度幼小衔接全套数学课件
- 淄博市2024届高三二模历史试题卷(含答案)
- 净水设备验收方案
- 九年级英语单词默写表(人教版)
- 切格瓦拉完整
- 逻辑门公开课教案教学设计课件
- 现代汉语(黄伯荣、廖序东版)课件–绪论
评论
0/150
提交评论