介绍
本篇文章给大家分享的是有关使用python实现演算法算法的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
代码
& # 39; & # 39; & # 39; 数据集:Mnist 训练集数量:60000(实际使用:10000) 测试集数量:10000(实际使用:1000) 层数:40 ------------------------------ 运行结果: 正确率:97% 运行时长:65米 & # 39;& # 39;& # 39; 导入的时间 进口numpy np def loadData(文件名): & # 39;& # 39;& # 39; 加载文件 :param文件名:要加载的文件路径 返回:数据集和标签集 & # 39;& # 39;& # 39; #存放数据及标记 dataArr=[] labelArr=[] #读取文件 fr=开放(文件名) #遍历文件中的每一行 线的fr.readlines (): #获取当前行,并按”、“切割成字段放入列表中 #地带:去掉每行字符串首尾指定的字符(默认空格或换行符) #分裂:按照指定的字符将字符串切割成每个字段,返回列表形式 curLine=line.strip () .split (& # 39; & # 39;) #将每行中除标记外的数据放入数据集中(curLine[0]为标记信息) #在放入的同时将原先字符串形式的数据转换为整型 #此外将数据进行了二值化处理,大于128的转换成1,小于的转换成0,方便后续计算 dataArr.append ([int (int (num)比;128)的num curLine [1:]]) #将标记信息放入标记集中 #放入的同时将标记转换为整型 #转换成二分类任务 #标签0设置为1,反之为1 如果int (curLine [0])==0: labelArr.append (1) 其他: labelArr.append (1) #返回数据集和标记 返回dataArr labelArr def calc_e_Gx (trainDataArr trainLabelArr n div,规则,D): & # 39;& # 39;& # 39; 计算分类错误率 :param trainDataArr:训练数据集数字 :param trainLabelArr:训练标签集数组 :param n:要操作的特征 :param div:划分点 :param规则:正反例标签 :param D:权值分布D 返回:预测结果,分类误差率 & # 39;& # 39;& # 39; #初始化分类误差率为0 e=0 #将训练数据矩阵中特征为n的那一列单独剥出来做成数组。因为其他元素我们并不需要, #直接对庞大的训练集进行操作的话会很慢 x=trainDataArr [: n] #同样将标签也转换成数组格式,x和y的转换只是单纯为了提高运行速度 #测试过相对直接操作而言性能提升很大 y=trainLabelArr 预测=[] #依据小于和大于的标签依据实际情况会不同,在这里直接进行设置 如果规则==& # 39;LisOne& # 39;: L=1 H=1 其他: L=1 H=1 #遍历所有样本的特征 因为我在范围(trainDataArr.shape [0]): 如果x[我]& lt;div: #如果小于划分点,则预测为L #如果设置小于div为1,那我么就是1, #如果设置小于div为1,L就是1 predict.append(左) #如果预测错误,分类错误率要加上该分错的样本的权值(8.1式) 如果y[我]!=L: e +=D[我] elif x[我]祝辞=div: #与上面思想一样 predict.append (H) 如果y[我]!=H: e +=D[我] #返回预测结果和分类错误率e #预测结果其实是为了后面做准备的,在算法8.1第四步式8.4中exp内部有个Gx,要用在那个地方 #以此来更新新的D 返回np.array(预测),e def createSigleBoostingTree (trainDataArr trainLabelArr D): & # 39;& # 39;& # 39; 创建单层提升树 :param trainDataArr:训练数据集数组 :param trainLabelArr:训练标签集数组 8.1:param D:算法中的D 返回:创建的单层提升树 & # 39;& # 39;& # 39; #获得样本数目及特征数量 m, n=np.shape (trainDataArr) #单层树的字典,用于存放当前层提升树的参数 #也可以认为该字典代表了一层提升树 sigleBoostTree={} #初始化分类误差率,分类误差率在算法8.1步骤(2)(b)有提到 #误差率最高也只能100%,因此初始化为1 sigleBoostTree [& # 39; e # 39;]=1 #对每一个特征进行遍历,寻找用于划分的最合适的特征 因为我在范围(n): #因为特征已经经过二值化,只能为0和1,因此分切分时分为-0.5,0.5,1.5三挡进行切割 在div (-0.5, 0.5, 1.5): #在单个特征内对正反例进行划分时,有两种情况: #可能是小于某值的为1,大于某值得为1,也可能小于某值得是1,反之为1 #因此在寻找最佳提升树的同时对于两种情况也需要遍历运行 # LisOne:低>以上就是使用python实现演算法算法的方法,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。使用python实现演算法算法的方法