Exemple #1
0
class EmgModel:
    def __init__(self, labels):
        self.model = Knn(k=5)
        self.labels = labels
        self.all_data = list()
        self.all_target = list()
        for pose in labels:
            label = labels[pose]
            data = self.load_data(label)
            target = [pose] * len(data)
            self.all_data += data
            self.all_target += target

    def run(self):
        # 训练数据和测试数据分离
        train_data = self.all_data[0::2]
        train_target = self.all_target[0::2]
        predict_data = self.all_data[1::2]
        predict_target = self.all_target[1::2]

        # 模型训练
        self.model.fit(train_data, train_target)
        # 模型预测
        y = self.model.predict(predict_data)
        num = 0
        for i in range(len(y)):
            if predict_target[i] == y[i]:
                num += 1

        cm = metrics.confusion_matrix(y, predict_target)
        print("混淆矩阵")
        print(cm)
        print("分类报告")
        cr = metrics.classification_report(y, predict_target)
        print(cr)
        print("准确率:%s %%" % ((num / len(predict_target)) * 100))

    def load_data(self, label):
        parent_dir = "data/%s" % label
        res = []
        for file in os.listdir(parent_dir):
            filename = "%s/%s" % (parent_dir, file)
            f = open(filename, 'r')
            data = []
            for line in f.readlines():
                row = line.replace('\n', '').replace("[",
                                                     "").replace("]",
                                                                 "").split(",")
                row = [float(x) for x in row]
                data.append(row)
            f.close()
            data = np.array(data).T
            res.append(data)
        return res
def main():
    knn = Knn(7)

    knn.fit(x, y)

    img = mpimg.imread(sys.argv[1])

    for j in range(img.shape[0] / 50 + 1):
        for i in range(img.shape[1] / 50 + 1):
            h, b = np.histogram(img[j * 50:(j * 50) + 50,
                                    i * 50:(i * 50) + 50])
            if (knn.predict(h) == 1):
                img[j * 50:(j * 50) + 50, i * 50:(i * 50) + 50, 1] = 0

    plt.imshow(img)
    plt.show()
Exemple #3
0
def cross_validation(origiData, origiLabel, splitNum):
    lastIndex = 0
    offset = int(len(origiData) / splitNum)
    accurateRateSum = 0
    for i in range(1, splitNum + 1):
        # 切割数据集 分为splitNum-1个训练集和1个测试集
        tempData = np.split(origiData, (lastIndex, i * offset + 1))
        tempLabel = np.split(origiLabel, (lastIndex, i * offset + 1))

        testData = tempData[1]
        testLabel = tempLabel[1]
        trainData = np.concatenate([tempData[0], tempData[2]])
        trainLabel = np.concatenate([tempLabel[0], tempLabel[2]])
        # 迭代区间的开始索引值
        lastIndex = i * offset

        # 使用knn进行预测
        knn = Knn(trainData, trainLabel, 10)
        predictRsl = knn.predict(testData)
        accuracy = caculate_accuracy(predictRsl, testLabel)
        accurateRateSum += accuracy
    # 返回预测结果的平均值
    return accurateRateSum / splitNum
Exemple #4
0
#!/usr/bin/env python

import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from Knn import Knn
from img.data import x, y

if len(sys.argv) < 2:
    print "Informar caminho da imagem"
    exit()

knn = Knn(7)

knn.fit(x, y)

img = mpimg.imread(sys.argv[1])

for j in range(img.shape[0] / 50 + 1):
    for i in range(img.shape[1] / 50 + 1):
        h, b = np.histogram(img[j * 50:(j * 50) + 50, i * 50:(i * 50) + 50])
        if (knn.predict(h) == 1):
            img[j * 50:(j * 50) + 50, i * 50:(i * 50) + 50, 1] = 0

plt.imshow(img)
plt.show()
Exemple #5
0
import matplotlib.pyplot as plt

iris = datasets.load_digits()
# print(print(iris))
X, y = iris.data, iris.target

X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.3,
                                                    random_state=1000)
# print(X_train.shape)
# print(X_train[0])

# plt.figure()
# plt.scatter(X[:,[0]], X[:,[1]], c=y)
# plt.show()
acc = 0
for k in [3, 5, 7]:
    clf = Knn(k)

    clf.fit(X_train, y_train)
    predictions = clf.predict(X_test)

    t_acc = np.sum(predictions == y_test) / len(y_test)
    if t_acc > acc:
        acc = t_acc
        best_k = k

print(acc)
print(best_k)