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()
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
#!/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()
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)