資源簡介
Python3實現KNN的三個例子(包含數據集),水果分類,識別手寫數字,找相似的朋友

代碼片段和文件信息
#?-*-?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(“\t“)
????????????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爜&&鏁版嵁闆?knn\fruit_classify.py
?????文件????????4349??2019-03-06?18:07??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?knn\digital_recognition.py
?????文件???????????0??2018-09-19?20:21??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?knn\__init__.py
?????文件????????3600??2019-03-06?18:09??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?knn\interests_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??__MACOSX\20190306KNN欏圭洰浠g爜&&鏁版嵁闆?
?????文件?????????120??2019-03-06?18:11??__MACOSX\20190306KNN欏圭洰浠g爜&&鏁版嵁闆?._.DS_Store
?????目錄???????????0??2019-03-06?16:31??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\
?????目錄???????????0??2019-03-06?17:18??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\
?????文件???????26067??2019-03-06?16:31??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\interests_friends.txt
?????目錄???????????0??2019-03-06?17:05??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\5_135.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\4_36.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\8_102.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\8_116.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\5_121.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\4_22.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\5_109.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\3_17.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\3_164.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\3_170.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\3_158.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\9_113.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\9_76.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\0_52.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\4_124.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\4_130.txt
?????文件????????1088??2019-03-06?16:47??20190306KNN欏圭洰浠g爜&&鏁版嵁闆?data\knn\trainingDigits\0_46.txt
............此處省略2865個文件信息
- 上一篇:廖雪峰python教程打印版完整版.pdf
- 下一篇:人臉識別算法 python
評論
共有 條評論