BP算法鸢尾花分类

网上很多鸢尾花例子,学习其他人后仿写,我在运行其他人的时候会有溢出和错误。

下述代码准确率95%

附鸢尾花数据集链接:https://pan.baidu.com/s/1J3-2INUT19BVZWCUet3X6A

提取码:y07d

如果有什么不对的或者有什么不懂Iamzhubaoliang@yeah.net

工程地址https://git.lug.ustc.edu.cn/Iamzhubaoliang/irissort

import math

import random

import pandas as pd

random.seed(0)

def rand(a,b):

return (b-a)*random.random()+a

def dsigmoid(x):

return x*(1-x)

def sigmoid(gamma):

if gamma < 0:

return 1 - 1/(1 + math.exp(gamma))

else:

return 1/(1 + math.exp(-gamma))

def makematrix(I,J):

m = []

for i in range(I):

m.append([0.0]*J)#一维构造二维

return m

class BP:

''' 三层BP网络'''

def __init__(self,ni,nh,no):

self.ni=ni+1

self.nh=nh+1

self.no=no

self.ai=[1.0]*self.ni

self.ah=[1.0]*self.nh

self.ao=[1.0]*self.no

self.wi=makematrix(self.ni,self.nh)

self.wo=makematrix(self.nh,self.no)

for i in range(self.ni):

for j in range(self.nh):

self.wi[i][j]=rand(-2,2)

for i in range(self.nh):

for j in range(self.no):

self.wo[i][j]=rand(-2,2)

def Forward(self,input):

for i in range(self.ni-1):

self.ai=input

for i in range(self.nh):

sum=0.0

for j in range(self.ni-1):

#print(self.ai[j])

sum+=self.wi[j][i]*self.ai[j]

self.ah[i]=sigmoid(sum)

for i in range(self.no):

sum=0.0

for j in range(self.no):

sum+=self.wo[j][i]*self.ah[j]

self.ao[i]=sigmoid(sum)

return self.ao

def backward(self,tartget,lv):

rerror=0.0

outerror=[1.0]*self.no

for i in range(self.no):

error=tartget[i]-self.ao[i]

rerror=error

outerror[i]=dsigmoid(self.ao[i])*error

herror=[1.0]*self.nh

for i in range(self.nh):

error=0.0

for j in range(self.no):

error+=outerror[j]*self.wo[i][j]

herror[i]=dsigmoid(self.ah[i])*error

for i in range(self.nh):

for j in range(self.no):

change=outerror[j]*self.ah[i]

self.wo[i][j]=self.wo[i][j]+lv*change

for i in range(self.ni-1):

for j in range(self.nh):

change=herror[j]*self.ai[i]

self.wi[i][j]=self.wi[i][j]+lv*change

error = 0.0

error += 0.5 * rerror ** 2

return error

def train(self, patterns, iterations, lr=0.009):

# lr: 学习速率(learning rate)

for i in range(iterations):

error = 0.0

for p in patterns:

inputs = p[0]

targets = p[1]

#print(inputs, ",", p[1])

self.Forward(inputs)

error = error + self.backward(targets, lr)

if i%100==0:

print('error: %-.9f' % error)

def test(self,patterns):

count=0

for p in patterns:

target=p[1]

#print(target)

result=self.Forward(p[0])

index = result.index(max(result))

if index==0 and target==[1,0,0]:

count=count+1

elif index==1 and target==[0,1,0]:

count=count+1

elif index==2 and target==[0,0,1]:

count = count + 1

accuracy = float(count / len(patterns))

print('accuracy: %-.9f' % accuracy)

def iris():

data=[]

raw=pd.read_csv('iris.csv')

raw_data=raw.values

raw_feature=raw_data[:,1:6]

print(raw_feature)

for i in range(len(raw_feature)):

ele=[]

ele.append(raw_feature[i])

if raw_data[i][5]=='setosa':

ele.append([1,0,0])

elif raw_data[i][5]=='versicolor':

ele.append([0,1,0])

else:

ele.append([0,0,1])

print(ele)

data.append(ele)

random.shuffle(data)

trainning=data[0:100]

test=data[101:]

nn=BP(4,7,3)

nn.train(data,10000)

nn.test(test)

if __name__ == '__main__':

iris()1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

鸢尾花分类python算法_BP算法鸢尾花分类相关推荐

  1. SAR成像处理算法_BP算法

    目录 BP算法基本原理 距离向脉冲压缩 划分成像网格 聚焦处理 小结 BPA成像处理软件设计与接口 机载SAR模型BPA1 程序接口 仿真数据1处理(一个点目标) 仿真数据使用前面介绍的机载SAR回波 ...

  2. kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)

    一.分散性聚类(kmeans) 算法流程: 1.选择聚类的个数k. 2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心. 3.对每个点确定其聚类中心点. 4.再计算其聚类新中心. 5.重复以 ...

  3. 用python实现KNN算法对鸢尾花的分类

    一.KNN算法 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接 ...

  4. 鸢尾花分类python,Python鸢尾花分类实现

    #coding:utf-8 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_ ...

  5. Python实现KNN算法(鸢尾花集)

    不同颜色的鸢尾花花语不尽相同,蓝色鸢尾花语是精致的美丽,红色鸢尾花的花语代表着热情.适应力强.紫蓝色鸢尾花花语代表着好消息.想念你.黄色鸢尾花的花语代表着友谊永固.热情开朗,白色鸢尾花花语代表着纯真. ...

  6. Python机器学习基础教程——鸢尾花分类

    Python机器学习基础教程--鸢尾花分类 初识数据 训练数据与测试数据 观察数据-数据可视化 模型的建立与评估--K近邻算法 她还有一些鸢尾花的测量数据,这些花之前已经被植物学专家鉴定为属于 set ...

  7. Python+sklearn使用支持向量机算法实现数字图片分类

    关于支持向量机的理论知识,大家可以查阅机器学习之类的书籍或网上资源,本文主要介绍如何使用Python扩展库sklearn中的支持向量机实现数字图片分类. 1.首先编写代码生成一定数量的含有数字的图片 ...

  8. 机器学习:朴素贝叶斯算法+中文情感分类+python

    朴素贝叶斯中文情感分类 1.写在前面 朴素贝叶斯算法理论在很多博客上已经解释的很详细了,本文就不再叙述,本文注重于算法的应用以及编程实现,在读取前人的博客以及他们的项目应用,本人结合书本<机器学 ...

  9. Python实现Logistc回归分类(西瓜数据集、鸢尾花数据集)详解

    文章目录 Logistic回归原理讲解 逻辑回归的损失函数 梯度下降 代码实现 西瓜数据集 全代码 鸢尾花(Iris)数据集 LogisticModel 全代码 主函数实现 全代码 Logistic回 ...

最新文章

  1. 让更多声音参与改变,美团外卖“订单分配”算法公开
  2. GC之二--GC是如何回收时的判断依据、shallow(浅) size、retained(保留) size、Deep(深)size...
  3. 亚马逊AWS本月第三次出现数据中心断电故障,Coinbase、Slack等受影响
  4. python中解决中文乱码
  5. Java GUI:将JPanel添加进JScrollPane
  6. JPA关系映射系列一:one-to-one外键关联
  7. HDU- 最大报销额
  8. 用于混合Spock 1.x和JUnit 5测试的Maven项目设置
  9. wifi 信道_Win10电脑找不到自家Wifi无线网络解决方法 可能是无线信道问题
  10. 深度学习-吴恩达-笔记-1-深度学习引言
  11. linux下串口多线程通信 ,多串口收发数据错乱问题解决办法
  12. C++笔记---函数声明(prototype)
  13. 解决CAD图层打印不出来的方法
  14. HTML5+css3 的开心网游戏页面
  15. Nginx学习使用记录
  16. flv网页播放器开源代码
  17. 设计电商平台优惠券系统
  18. OracleRAC基本概念及入门
  19. php报错_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/df12aa1edf6tt330187a6514aae4fda4.php
  20. Android Studio kotlin编程实现图片滑动浏览 stepbystep

热门文章

  1. Jmeter wrk ab压测软件对比
  2. python余弦相似度_推荐系统01--余弦相似度
  3. 诺基亚n1 android 64位,诺基亚N1开始推送安卓5.0.2系统更新
  4. 项目管理标杆和先驱——华为管理体系(PMP),一文看懂!
  5. RecyclerView使用 及 滑动时加载图片优化方案
  6. Word行间距调整不了?学会这个技巧轻松调节行间距
  7. 使用Weevely工具上传一句话木马
  8. HCIA 交换机原理与ARP协议
  9. 9、Horizon 连接服务器CA证书配置
  10. ufl计算机科学排名,美国计算机专业如何选校