机器学习分类实例——数据测试
机器学习分类实例——数据测试
20180502学习记录、0504修改
今天早上主要是修改外文翻译,调整了一下公式的格式。下午主要是测试一下数据,我的评分是1~5分。之前SVM和决策树的准确率是70%多,贝叶斯准确率很低。但由于数据是精确对比,所以准确率会比较低,所以这次要测试,误差在±1情况下的准确率。
一、工作(针对SVM)
打开MLdata并在最下面追加代码。
1 随机选择测试集
Lr=[]
for i in range(350):
Lr.append(random.randint(0, 1090))
Lr=list(set(Lr))
Lr.sort()
Lrlen=len(Lr)
delta=abs(300-Lrlen)
for i in range(delta):
j=-i
Lr.pop(j)
选取的随机数可能会有重复,所以我取350个,尽量选择出超过300个的随机数。然后用set()去重,随后再调整成只含300个元素的list。
file2=open('test2.txt','w')
for j in Lr:
vec=L3[j]
i = str(vec).strip('[').strip(']')
file2.write(i+'\n')
file2.close()
老样子,写到文件。
2 生成训练集
Ll=list(range(0,1090))
di=[v for v in Ll if v not in Lr]
生成0~1089,并求全集和测试集的差集,便是训练集--di。
file3=open('test3.txt','w')
for j in di:
vec=L3[j]
i = str(vec).strip('[').strip(']')
file3.write(i+'\n')
file3.close()
老样子,写到文件当中
3 预测测试(代码比较简单选取300条测试)
import numpy as np
from sklearn.svm import SVC
from sklearn.cross_validation import train_test_split
with open("test3.txt","r") as file:
result=[]
for line in file.readlines():
result.append(list(map(str,line.strip().split(','))))
vec = np.array(result)
x = vec[:,:-3]
y = vec[:,-3]
y2=vec[:,-2]
y3=vec[:,-1]
f = open("test2.txt","r")
newl=[]
for line in f.readlines():
newl.append(list(map(str,line.strip().split(','))))
newv = np.array(newl)
new_test_x = newv[:,:-3]
new_test_y1=newv[:,-3]
new_test_y2=newv[:,-2]
new_test_y3=newv[:,-1]
###############################################################################
#模型训练
###############################################################################
# 模型1
train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3)
clf1 = SVC(kernel='linear',C=0.4)
clf1.fit(train_x,train_y)
pred_y = clf1.predict(test_x)
new_pred_y1 = clf1.predict(new_test_x)
###############################################################################
# 模型2
train_x2,test_x2,train_y2,test_y2 = train_test_split(x,y2,test_size=0.2)
clf2= SVC(kernel='linear',C=0.4)
clf2.fit(train_x2,train_y2)
pred_y2 = clf2.predict(test_x2)
new_pred_y2 = clf2.predict(new_test_x)
###############################################################################
# 模型3
train_x3,test_x3,train_y3,test_y3 = train_test_split(x,y3,test_size=0.3)
clf3= SVC(kernel='linear',C=0.4)
clf3.fit(train_x3,train_y3)
pred_y3 = clf3.predict(test_x3)
new_pred_y3 = clf3.predict(new_test_x)
###############################################################################
#预测分析
testnum=300
count1=0
count2=0
count3=0
for i in range(testnum):
py1=int(new_pred_y1[i])
py2=int(new_pred_y2[i])
py3=int(new_pred_y3[i])
cy1=int(new_test_y1[i])
cy2=int(new_test_y2[i])
cy3=int(new_test_y3[i])
if abs(py1-cy1)<2:
count1=count1+1
if abs(py2-cy2)<2:
count2=count2+1
if abs(py3-cy3)<2:
count3=count3+1
#
p1=count1/testnum
p2=count2/testnum
p3=count3/testnum
print(p1,p2,p3)
最终可以得到三个测试结果“0.8566666666666667 0.96 0.89”
分别代表三个标签(子话题)在误差为1情况下的准确率
民主制度:0.86、
民主自由:0.96、
民主监督:0.89
最终分别生成三张图(svm/nby/dt):
二、总结反思
五一刚过,玩了3天,浑浑噩噩。接下来该好好写论文了,但是有个地方我还是挺烦恼的。因为我最开始的语料库是学长直接给我的,是已经格式化处理好的数据。而实际上我是需要自己写爬虫从互联网上爬取的,但是这一点工作我还没有做,实际上我也来不及做了。但是还是需要理解一下这方面的知识,写代码已经是来不及了,到时候毕业答辩,大概是不会问这方面的问题。总之这两天先学学爬虫吧。
三、接下来的任务
- 学习网络爬虫
- 学习论文撰写。