模式识别——支持向量机


二分类

from sklearn import svm
import numpy as np
w=[]
train_x=[]
train_y=[]
test_x=[]
test_y=[]
def Init():
    global train_x,train_y,test_x,test_y
    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\train-images.idx3-ubyte', 'rb') as f:
        file = f.read()

    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\train-labels.idx1-ubyte', 'rb') as f:
        lab = f.read()

    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\t10k-images.idx3-ubyte', 'rb') as f:
        file2 = f.read()

    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\t10k-labels.idx1-ubyte', 'rb') as f:
        lab2 = f.read()

    for i in range(0, 60000):
        item = lab[8 + i]
        num = int(str(item).encode('UTF-8'), 16)
        if (num != 5 and num != 8): continue
        IMG_ = [int(str(item).encode('UTF-8'), 16) for item in file[16 + i * 784: 16 + (i + 1) * 784]]
        train_x.append(IMG_)

        if num == 8:
            train_y.append(-1)
        else :
            train_y.append(1)

    train_x = np.array(train_x)


    for i in range(0, 10000):
        item = lab2[8 + i]
        num = int(str(item).encode('UTF-8'), 16)
        if (num != 5 and num != 8): continue
        IMG_ = [int(str(item).encode('UTF-8'), 16) for item in file2[16 + i * 784: 16 + (i + 1) * 784]]
        test_x.append(IMG_)

        if num==8:
            test_y.append(-1)
        else:
            test_y.append(1)


    test_x = np.array(test_x)

def Train():
    global w,train_x,train_y,test_x,test_y
    n=len(train_x)
    m=len(test_x)
    predictor = svm.SVC(gamma='scale', C=1.0, decision_function_shape='ovr', kernel='rbf')
    predictor.fit(train_x[:n], train_y[:n])
    w=predictor.predict(test_x)

def Test():
    global w,train_x,train_y,test_x,test_y
    n=len(train_x)
    m=len(test_x)
    s=0
   # print(len(w))
   # print(w)
   # print(len(test_y))
   # print(test_y)
    for i in range(0,m):
        s+=(w[i]==test_y[i])
    print("The accuracy is %.2f"%(s*100/m))


Init()
Train()
Test()

image

多分类


    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\train-labels.idx1-ubyte', 'rb') as f:
        lab = f.read()

    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\t10k-images.idx3-ubyte', 'rb') as f:
        file2 = f.read()

    with open(r'C:\Users\Administrator\Desktop\模式识别\分类器作业\t10k-labels.idx1-ubyte', 'rb') as f:
        lab2 = f.read()

    for i in range(0, 60000):
        item = lab[8 + i]
        num = int(str(item).encode('UTF-8'), 16)
        #if (num != 5 and num != 8): continue
        IMG_ = [int(str(item).encode('UTF-8'), 16) for item in file[16 + i * 784: 16 + (i + 1) * 784]]
        train_x.append(IMG_)

        train_y.append(num)

    train_x = np.array(train_x)


    for i in range(0, 10000):
        item = lab2[8 + i]
        num = int(str(item).encode('UTF-8'), 16)
        #if (num != 5 and num != 8): continue
        IMG_ = [int(str(item).encode('UTF-8'), 16) for item in file2[16 + i * 784: 16 + (i + 1) * 784]]
        test_x.append(IMG_)

        test_y.append(num)

    test_x = np.array(test_x)

def Train():
    global w,train_x,train_y,test_x,test_y
    n=len(train_x)
    m=len(test_x)
    predictor = svm.SVC(gamma='scale', C=1.0, decision_function_shape='ovr', kernel='rbf')
    predictor.fit(train_x[:n], train_y[:n])
    w=predictor.predict(test_x)


CS