热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kNNpython实现

kNN.py:#coding:utf-8importnumpyasnpfrommathimportsqrtfromcollectionsimportCounterfromm

kNN.py:

# coding:utf-8import numpy as np
from math import sqrt
from collections import Counter
from metrics import accuracy_scoreclass kNNClassifier:def __init__(self, k):&#39;&#39;&#39;初始化KNN分类器&#39;&#39;&#39;assert 1 <&#61; k, &#39;k must be valid&#39;self.k &#61; kself._X_train &#61; Noneself._y_train &#61; Nonedef fit(self, X_train, y_train):&#39;&#39;&#39;根据训练数据集X-train和y_train训练kNN分类器&#39;&#39;&#39;assert X_train.shape[0] &#61;&#61; y_train.shape[0], &#39;the size of X_train must equal to the size of y_train&#39;assert self.k <&#61; X_train.shape[0], &#39;the size of X_train must be at least k&#39;self._X_train &#61; X_trainself._y_train &#61; y_trainreturn selfdef predict(self, X_predict):&#39;&#39;&#39;给定带预测数据集X_predict,返回表示X_predict的结果向量&#39;&#39;&#39;assert self._X_train is not None and self._y_train is not None, &#39;must fit before predict&#39;assert X_predict.shape[1] &#61;&#61; self._X_train.shape[1], &#39;the feature number of X_predict equal to the feature number of self._X_train&#39;y_predict &#61; [self._predict(x) for x in X_predict]return np.array(y_predict)def _predict(self, x):&#39;&#39;&#39;给定单个待预测数据x&#xff0c;返回x的预测结果值&#39;&#39;&#39;assert x.shape[0] &#61;&#61; self._X_train.shape[1], &#39;the feature number of x must be equal to X_train&#39;distances &#61; [sqrt(np.sum((x_train - x)**2))for x_train in self._X_train]nearest &#61; np.argsort(distances)topK_y &#61; [self._y_train[i] for i in nearest[:self.k]]votes &#61; Counter(topK_y)return votes.most_common(1)[0][0]def score(self, X_test, y_test):&#39;&#39;&#39;计算对测试集的预测准确度&#39;&#39;&#39;y_predict &#61; self.predict(X_test)return accuracy_score(y_test, y_predict)def __repr__(self):return &#39;kNN(k&#61;%d)&#39; % self.k# 使用:
# kNN_clf &#61; kNNClassifier(3)
# kNN_clf.fit(X_train,y_train)
# kNN_clf.predict(x)
# kNN_clf.score(X_test,y_test)

metrics.py:

import numpy as npdef accuracy_score(y_test,y_predict):&#39;&#39;&#39;计算y_predict相对于y_test的准确度&#39;&#39;&#39;assert y_test.shape[0] &#61;&#61; y_predict.shape[0],&#39;the size of y_test must equal to the size of y_predict&#39;return sum(y_predict &#61;&#61; y_test) / len(y_test)

数据归一化处理&#xff08;均值方差归一化&#xff09;&#xff1a;

import numpy as np class StandardScaler:def __init__(self):self.mean_ &#61; Noneself.scale_ &#61; Nonedef fit(self,X):&#39;&#39;&#39;根据训练数据集X获得数据均值和方差&#39;&#39;&#39;assert X.ndim &#61;&#61; 2,&#39;the dimension of X must be 2&#39;self.mean_ &#61; np.array([np.mean(X[:,i]) for i in range(X.shape[1])])self.scale_ &#61; np.array([np.std(X[:,i]) for i in range(X.shape[1])])return selfdef transform(self,X):&#39;&#39;&#39;将X根据已有信息进行均值方差归一化处理&#39;&#39;&#39;assert X.ndim &#61;&#61; 2,&#39;the dimension of X must be 2&#39;assert self.mean_ is not None and self.scale_ is not None , &#39;must fit before transform!&#39;assert X.shape[1] &#61;&#61; len(self.mean_),&#39;the feature number of X must be equal to mean_ and std_&#39;resX &#61; np.empty(shape &#61; X.shape,dtype &#61; float)for col in range(0,X.shape[1]):resX[:,col] &#61; (X[:,col] - self.mean_[col])/self.scale_[col]return resX


推荐阅读
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
author-avatar
摩奇甜品
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有