Python3实现KNN的三个例子(包含数据集),水果分类,识别手写数字,找相似的朋友
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 0 2019-03-06 18:11 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?
目录 0 2019-03-06 18:09 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knn
文件 3753 2019-03-06 18:02 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knnfruit_classify.py
文件 4349 2019-03-06 18:07 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knndigital_recognition.py
文件 0 2018-09-19 20:21 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knn\__init__.py
文件 3600 2019-03-06 18:09 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knninterests_similar.py
文件 6148 2019-03-06 18:11 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?.DS_Store
目录 0 2019-03-06 18:11 __MACOSX
文件 0 2019-03-06 18:11 __MACOSX20190306KNN椤圭洰浠g爜&&鏁版嵁闆?
文件 120 2019-03-06 18:11 __MACOSX20190306KNN椤圭洰浠g爜&&鏁版嵁闆?._.DS_Store
目录 0 2019-03-06 16:31 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?data
目录 0 2019-03-06 17:18 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn
文件 26067 2019-03-06 16:31 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknninterests_friends.txt
目录 0 2019-03-06 17:05 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits5_135.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_36.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits8_102.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits8_116.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits5_121.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_22.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits5_109.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_17.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_164.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_170.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_158.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits9_113.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits9_76.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits _52.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_124.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_130.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits _46.txt
............此处省略2865个文件信息
# -*- coding:utf-8 -*-
__author__ = ‘yangxin_ryan‘
from numpy import *
from os import listdir
from collections import Counter
import operator
“““
图片的输入为 32 * 32的转换为 1 * 1024的向量
“““
class DigitalRecognition(object):
def __init__(self):
print(“Welcome 手写数字识别算法!“)
“““
1.距离计算
tile生成和训练样本对应的矩阵,并与训练样本求差
取平方
将矩阵的每一行相加
开方
根据距离从小到大的排序,并返回对应的索引位置
2.选择距离最小的k个值
3.排序并返回出现最多的那个类型
“““
def classify_1(self in_x data_set labels k):
data_set_size = data_set.shape[0]
diff_mat = tile(in_x (data_set_size 1)) - data_set
sq_diff_mat = diff_mat ** 2
sq_distances = sq_diff_mat.sum(axis=1)
distances = sq_distances ** 0.5
sorted_dist_indicies = distances.argsort()
#
class_count = {}
for i in range(k):
vote_i_label = labels[sorted_dist_indicies[i]]
class_count[vote_i_label] = class_count.get(vote_i_label 0) + 1
sorted_class_count = sorted(class_count.items() key=operator.itemgetter(1) reverse=True)
return sorted_class_count
“““
1.计算距离
2.k个最近的标签
3.出现次数最多的标签即为最终类别
“““
def classify_2(self in_x data_set labels k):
dist = np.sum((in_x - data_set) ** 2 axis=1) ** 0.5
k_labels = [labels[index] for index in dist.argsort()[0:k]]
label = Counter(k_labels).most_common(1)[0][0]
return label
def file_to_matrix(self file_name):
fr = open(file_name)
number_of_lines = len(fr.readlines())
return_mat = zeros((number_of_lines 3))
class_label_vector = []
fr = open(file_name)
index = 0
for line in fr.readlines():
line = line.strip()
list_from_line = line.split(“ “)
return_mat[index :] = list_from_line[0:3]
class_label_vector.append(int(list_from_line[-1]))
index += 1
return return_mat class_label_vector
“““
将图片转换为向量
图片的输入为 32 * 32的,将图像转换为向量,该函数创建 1 * 1024 的Numpy数组
“““
def img_to_vector(self file_name):
return_vector = zeros((1 1024))
fr = open(file_name ‘r‘)
for i in range(32):
line_str = fr.readline()
for j in range(32):
return_vector[0 32 * i + j] = int(line_str[j])
return return_vector
def run(self train_file_path test_file_path k):
labels = []
training_file_list = listdir(train_file_path)
train_len = len(training_file_list)
training_mat = zeros((train_len 1024))
for i in range(train_len):
file_name_str = training_file_list[i]
file_str = file_name_str.split(“.“)[0]
class_num_str = int(file_str.split(“_“)[0])
labels.append(class_num_str)
img_file = train_file_path + file_name_str
print(img_file)
training_mat[i] = self.img_to_vector(img_file)
test_file_list = listdir(test_file_path
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 0 2019-03-06 18:11 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?
目录 0 2019-03-06 18:09 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knn
文件 3753 2019-03-06 18:02 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knnfruit_classify.py
文件 4349 2019-03-06 18:07 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knndigital_recognition.py
文件 0 2018-09-19 20:21 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knn\__init__.py
文件 3600 2019-03-06 18:09 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?knninterests_similar.py
文件 6148 2019-03-06 18:11 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?.DS_Store
目录 0 2019-03-06 18:11 __MACOSX
文件 0 2019-03-06 18:11 __MACOSX20190306KNN椤圭洰浠g爜&&鏁版嵁闆?
文件 120 2019-03-06 18:11 __MACOSX20190306KNN椤圭洰浠g爜&&鏁版嵁闆?._.DS_Store
目录 0 2019-03-06 16:31 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?data
目录 0 2019-03-06 17:18 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn
文件 26067 2019-03-06 16:31 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknninterests_friends.txt
目录 0 2019-03-06 17:05 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits5_135.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_36.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits8_102.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits8_116.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits5_121.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_22.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits5_109.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_17.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_164.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_170.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits3_158.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits9_113.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits9_76.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits _52.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_124.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits4_130.txt
文件 1088 2019-03-06 16:47 20190306KNN椤圭洰浠g爜&&鏁版嵁闆?dataknn rainingDigits _46.txt
............此处省略2865个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)