机器学习分类实例——数据测试

机器学习分类实例——数据测试

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天,浑浑噩噩。接下来该好好写论文了,但是有个地方我还是挺烦恼的。因为我最开始的语料库是学长直接给我的,是已经格式化处理好的数据。而实际上我是需要自己写爬虫从互联网上爬取的,但是这一点工作我还没有做,实际上我也来不及做了。但是还是需要理解一下这方面的知识,写代码已经是来不及了,到时候毕业答辩,大概是不会问这方面的问题。总之这两天先学学爬虫吧。

三、接下来的任务

  • 学习网络爬虫
  • 学习论文撰写。
posted @ 2018-06-06 15:42  爱拖交作业的小明  阅读(383)  评论(0编辑  收藏  举报