python SVM(支持向量机)的实现

from sklearn import svm
import numpy as np
from sklearn.metrics import accuracy_score
def loadSplitDataSet1(txtname,rate,k):
    file = open(txtname)
    lines1 = file.readlines()
    file.close
    #print(lines1)
    lines2=[]
    lines1.pop(0)
    for line in lines1:
        lineTemp=line.replace('\n','').split('\t')
        lines2.append(lineTemp)
    step=int(1/(1-rate))
    testSet=lines2[::step]
    del lines2[::step]
    trainSet=lines2
    trainData=[]
    testData=[]
    trainLabel=[]
    testLabel=[]
    for x in trainSet:
        trainDataTemp=[]
        if(x[-k]=='yes'):
            trainLabel.append(1)
        else:
            trainLabel.append(0)
        for y in x[0:-2]:
            if(y=='yes'):
                trainDataTemp.append(1)
            elif(y=='no'):
                trainDataTemp.append(0)
            else:
                trainDataTemp.append(float(y))
        trainData.append(trainDataTemp)
    for x in testSet:
        testDataTemp=[]
        if(x[-k]=='yes'):
            testLabel.append(1)
        else:
            testLabel.append(0)
        for y in x[0:-2]:
            if(y=='yes'):
                testDataTemp.append(1)
            elif(y=='no'):
                testDataTemp.append(0)
            else:
                testDataTemp.append(float(y))
        testData.append(testDataTemp)
    #print(len(trainData))
    #print(len(testData))
    #print(len(trainLabel))
    #print(len(testLabel))
    trainData=np.array(trainData) 
    testData=np.array(testData) 
    trainLabel=np.array(trainLabel) 
    testLabel=np.array(testLabel) 
    return trainData,testData,trainLabel,testLabel
def loadSplitDataSet2(txtname,rate,k):
    file = open(txtname)
    lines1 = file.readlines()
    file.close
    #print(lines1)
    lines2=[]
    for line in lines1:
        lineTemp=line.replace('\n','').split(',')
        if(int(lineTemp[0])!=k):
            lines2.append(lineTemp)
    step=int(1/(1-rate))
    testSet=lines2[::step]
    del lines2[::step]
    trainSet=lines2
    trainData=[]
    testData=[]
    trainLabel=[]
    testLabel=[]
    for x in trainSet:
        trainDataTemp=[]
        trainLabel.append(int(x[0]))
        for y in x[1:]:
            trainDataTemp.append(float(y))
        trainData.append(trainDataTemp)
    for x in testSet:
        testDataTemp=[]
        testLabel.append(int(x[0]))
        for y in x[1:]:
            testDataTemp.append(float(y))
        testData.append(testDataTemp)
    #print(len(trainData))
    #print(len(testData))
    #print(len(trainLabel))
    #print(len(testLabel))
    return trainData,testData,trainLabel,testLabel
if __name__ == "__main__":
    print('kernel=rbf')
    model = svm.SVC(kernel='rbf',gamma='auto')
    #kernel :核函数,可以是‘linear’,‘poly’, ‘rbf’,
    trainData,testData,trainLabel,testLabel=loadSplitDataSet1('./AcuteInflammations/diagnosis.data',0.8,1)
    #trainData,testData,trainLabel,testLabel=loadSplitDataSet2('./wine.data',0.8,1)
    model.fit(trainData, trainLabel)
    model.score(trainData, trainLabel)
    predicted= model.predict(testData)
    print('--------------------------------------------------------------------')
    print('Nephritis of renal pelvis origin :')
    print('testLabel:',testLabel)
    print('predicteLabel:',predicted)
    acc=accuracy_score(testLabel, predicted)
    print('accuracy_score:',acc)
    print('--------------------------------------------------------------------')
    trainData,testData,trainLabel,testLabel=loadSplitDataSet1('./AcuteInflammations/diagnosis.data',0.8,2)
    #trainData,testData,trainLabel,testLabel=loadSplitDataSet2('./wine.data',0.8,2)
    model.fit(trainData, trainLabel)
    model.score(trainData, trainLabel)
    predicted= model.predict(testData)
    print('Inflammation of urinary bladder:')
    print('testLabel:',testLabel)
    print('predicteLabel:',predicted)
    acc=accuracy_score(testLabel, predicted)
    print('accuracy_score:',acc)
    print('--------------------------------------------------------------------')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值