文章目录
1.感知机代码实现
1.感知机代码实现
import time
import numpy
as np
from tqdm
import tqdm
def loaddata(filename
):
"""
加载mnist数据集
:param filename: 要加载的数据集路径
:return: list形式的数据集及标签
"""
print('start to read data')
dataArr
= []
labelArr
= []
fr
= open(filename
, 'r')
for line
in tqdm
(fr
.readlines
()):
curline
= line
.strip
().split
(',')
if int(curline
[0]) >= 5:
labelArr
.append
(1)
else:
labelArr
.append
(-1)
dataArr
.append
([int(num
) / 255 for num
in curline
[1:]])
return dataArr
, labelArr
def perceptron(dataArr
, labelArr
, iter=50):
"""
感知机训练过程
:param dataArr: 训练集的数据
:param labelArr: 训练集的标签
:param iter: 迭代次数
:return: 训练好的w和b
"""
print('strat to train')
dataMat
= np
.mat
(dataArr
)
labelMat
= np
.mat
(labelArr
).T
m
, n
= np
.shape
(dataMat
)
w
= np
.zeros
((1, n
))
b
= 0
η
= 0.001
for k
in range(iter):
for i
in range(m
):
xi
= dataMat
[i
]
yi
= labelMat
[i
]
if -1 * yi
* (w
* xi
.T
+ b
) >= 0:
w
= w
+ η
* yi
* xi
b
= b
+ η
* yi
print('Round %d : %d training' % (k
, iter))
return w
, b
def model_test(dataArr
, labelArr
, w
, b
):
"""
测试准确率
:param dataArr:测试数据集
:param labelArr: 测试标签
:param w: 权重
:param b: 偏置
:return: 测试集的准确率
"""
print('start to test')
dataMat
= np
.mat
(dataArr
)
labelMat
= np
.mat
(labelArr
).T
m
, n
= np
.shape
(dataMat
)
errornum
= 0
for i
in range(m
):
xi
= dataMat
[i
]
yi
= labelMat
[i
]
result
= -yi
* (w
* xi
.T
+ b
)
if result
>= 0:
errornum
+= 1
accurRate
= 1 - (errornum
/ m
)
return accurRate
if __name__
== '__main__':
start
= time
.time
()
trainData
, trainLabel
= loaddata
('data/mnist_train.csv')
testData
, testLabel
= loaddata
('data/mnist_test.csv')
w
, b
= perceptron
(trainData
, trainLabel
)
accurRate
= model_test
(testData
, testLabel
, w
, b
)
end
= time
.time
()
print('accuracy rate is:', accurRate
)
print('time span:', end
- start
)
start to read data
100%|██████████
| 60000/60000 [00:11<00:00, 5247.08it
/s
]
start to read data
100%|██████████
| 10000/10000 [00:01<00:00, 5326.08it
/s
]
strat to train
Round
0 : 50 training
Round
1 : 50 training
Round
2 : 50 training
Round
3 : 50 training
Round
4 : 50 training
Round
5 : 50 training
Round
6 : 50 training
Round
7 : 50 training
Round
8 : 50 training
Round
9 : 50 training
Round
10 : 50 training
Round
11 : 50 training
Round
12 : 50 training
Round
13 : 50 training
Round
14 : 50 training
Round
15 : 50 training
Round
16 : 50 training
Round
17 : 50 training
Round
18 : 50 training
Round
19 : 50 training
Round
20 : 50 training
Round
21 : 50 training
Round
22 : 50 training
Round
23 : 50 training
Round
24 : 50 training
Round
25 : 50 training
Round
26 : 50 training
Round
27 : 50 training
Round
28 : 50 training
Round
29 : 50 training
Round
30 : 50 training
Round
31 : 50 training
Round
32 : 50 training
Round
33 : 50 training
Round
34 : 50 training
Round
35 : 50 training
Round
36 : 50 training
Round
37 : 50 training
Round
38 : 50 training
Round
39 : 50 training
Round
40 : 50 training
Round
41 : 50 training
Round
42 : 50 training
Round
43 : 50 training
Round
44 : 50 training
Round
45 : 50 training
Round
46 : 50 training
Round
47 : 50 training
Round
48 : 50 training
Round
49 : 50 training
start to test
accuracy rate
is: 0.8141
time span
: 111.59057807922363
转载请注明原文地址: https://lol.8miu.com/read-6818.html