python实现knn算法案例,knnpython实现

  python实现knn算法案例,knnpython实现

  KNN(K-Nearest Neighbors,k-Nearest Neighbors)分类是一种监测分类方法,它首先基于标记数据训练模型,然后基于模型预测新的数据点,再标记新的数据点,即数据。

  一、knn算法逻辑

  knn算法的核心思想是,如果一个数据属于特征空间中最近的K个数据,并且大部分属于某个类别,那么这个样本也属于那个类别,具有该类别中样本的特征。一般来说,对于给定的测试样本和基于特定测量距离的方案,当前样本的分类结果是从最近的K个训练样本中预测出来的。比如用百度的图来说明knn算法的过程。预测图中徐的分类结果,首先要预设距离值,只考虑以徐为圆心,以这个距离值为半径的圆内的已知训练样本。根据这些样本的投票结果,徐属于w1类,且票数相当。

  Knn算法在分类判定中只根据一个或多个最近样本的类别来判定分类目标样本所属的类别。Knn算法在确定类别时只涉及非常少量的相邻样本。Knn算法主要依靠周围有限邻域内的样本来确定类别,而不是区分类别域的方法。因此,knn方法比其他方法更适用于类别域重叠和交叠较多的分类样本集。

  1、knn算法的计算步骤

  Knn算法根据与分类对象样本A最接近的K个样本数据的分类来预测A的可能类别,基本计算步骤如下。

  为了标准化数据,通常需要对其进行标准化,以避免尺寸对计算距离的影响。

  计算分类的对象数据和训练集中的样本之间的距离;

  找到与待分类样本最接近的k个样本;

  观察这K个样本的分类。

  具有最频繁出现的类别被用作分类目标数据的类别。

  knn算法的计算步骤非常简单。使用knn算法时,必须确定两个问题。第一个问题是如何计算距离,第二个问题是确定k的值。

  2.knn算法如何计算距离?

  在计算距离之前,必须对每个数值属性进行规范化。这有助于防止较大初始值域的属性权重比较小初始值域的属性权重过大。

  对于数值型属性,knn算法使用距离公式计算任意两个样本数据之间的距离。

  对于类别等名义属性,knn算法使用比较法。如果两个样本的数据相等,则距离为0;如果两个样本数据不同,则距离为1。

  对于缺失值,通常取最大差值。假设每个属性都已映射到[0,1]区间,对于名义属性,将差值设置为1。对于数值属性,如果两个元组都缺少值,则差值设置为1。如果只有一个值丢失,而另一个归一化值是V,则采用1-v和V之间的较大差值。

  3.knn算法如何确定k的值?

  k的最佳值需要通过实验来确定。根据k=1,通过测试数据集估计分类器的错误率。重复这个过程,允许k每增加1就增加一个邻居,并选择产生最小错误率的k。一般来说,训练数据集越多,k值越大,因此分类预测可以基于更大比例的训练数据集。应用中一般选择小k,k为奇数。通常,通过交叉检查来选择k的合适值。

  二。sklearn中的knn分类函数

  使用KNeighborsClassifier创建K近邻分类器:

  kle arn . neighbors . kneighborsclassifier(n _ neighbors=5,weights=uniform ,algorithm=auto ,leaf_size

  P=2,metric=经常撒糖,metric_params=None,n_jobs=None,**kwargs)

  参数注释:

  1,n_neighbors,相邻节点的个数,默认值为5。

  2,权重,权重,默认值是统一的,

  均匀:表示所有数据点的权重相同;

  点越靠近两个聚类的中心,权重越高。

  可调用:用户定义的函数,表示每个数据点的权重。

  3,算法,算法

  自动:根据值选择最佳算法。

  球树:使用球树

  kd树:KD树

  蛮力:用蛮力搜索

  4,p,公制,公制段,距离平均值

  公制参数:设置距离的计算方法。

  Metric_paras:传递给距离计算方法的参数

  三。观测资料

  Knn分类是一种监测分类方法,所以在建立复杂的分类模型之前,首先需要标记数据集,也就是训练数据集。您可以从sklearn数据集加载和学习现有数据。

  froms kle arn . datasetsimportload _ iris

  iris_dataset=load_iris(

  显示iris_dataset的数据、对象的结构和字典。

  异常类型:

  iris_dataset.keys()

  字典关键字([数据,目标,目标名称,描述,特征名称,文件名])

  1、样本数据

  数据是4列150行的示例数据。列名由feature_names决定,每一列称为矩阵的一个特征(属性)。前4行的数据是:

  iris_dataset.data[0:4]

  数组([[5.1,3.5,1.4,0.2],

  [4.9, 3. 1.4, 0.2],

  [4.7, 3.2, 1.3, 0.2],

  [4.6, 3.1, 1.5, 0.2]])

  2、标签

  Target是一个标签,用数字表示,target_names是标签的文本表示。

  iris_dataset.target[0:4]

  array([0,0,0,0])iris_dataset.target_names

  数组([setosa , versicolor , virginica],dtype=

  3.检查数据的散点图。

  检查数据的散点图矩阵,根据数据类别进行着色,并观察数据的分布情况:

  将熊猫作为pdimportmglearn导入

  iris_df=pd。DataFrame(x_train,columns=iris _ dataset . feature _ names)

  PD . plotting . scatter _ matrix(iris _ df,c=y_train,figsize=(15,15),marker=o ,hist_kwds={bins:20}

  ,s=60,alpha=.8,cmap=mglearn.cm3)

  第四,创建模型

  我们利用sklearn数据集中虹膜的测量数据建立复杂的分类模型,根据输入数据点预测虹膜的类别。

  1、拆分数据

  将虹膜数据分成训练集和测试集;

  from sk learn . model _ selection import train _ test _ splitx _ train,x_test,y_train,y _ test=train _ test _ split(iris _ dataset[ data ],iris_dataset[target],random_state=0)

  使用函数将标记的数据分成训练集和测试集:

  sk learn . model _ selection . train _ test _ split(* arrays,test_size,train_size,random_state,shuffle,分层)

  函数的参数注释:

  Test_size:分割测试集数据的百分比。如果test_size和train_size都为none,则默认值为test_size=0.25。

  Train_size:分割训练集数据的百分比,

  Random_state:如果是int,那么参数用来指定随机数生成的种子;如果没有,使用np.random作为随机数生成器。

  Shuffle:布尔值,默认值为True,表示拆分前对数据进行洗牌;如果shuffle=False,则层次结构必须为None。

  分层:如果不是None,则以分层的方式拆分数据,并以此作为类标签。

  2.创建分类器

  使用KNeighborsClassifier创建一个分类器,并将参数n_neighbors设置为1:

  来自sk learn . neighbors importknighborsclassifier

  KNN=KNeighborsClassifier(n _ neighbors=1)

  3.使用训练集来建立模型。

  对于监督学习,训练数据集包括两部分:输入和结果(标签)。每行输入对应一行结果,结果就是输入的正确分类(标签)。

  一般记住X_train是训练的输入数据集,X_train对应的结果是y_train,是训练数据集的输出。通过fit()函数训练模型,建立模型:

  KNN . fit(x _火车,y _火车)

  4.预测新数据

  对于训练后的模型,使用predict()函数来预测数据的结果。

  x_new=np.array([[5,2.9,1,0.2]])

  prediction=KNN . predict(x _ new)print(预测:{0},分类器:{1})。格式(预测,iris _ dataset[ target _ names ][预测])

  动词(verb的缩写)模型评估

  Knn分类有两个重要的参数:邻域数和数据点间距离的度量方法。在实践中,使用更小的奇数邻居,如3和5,通常可以获得更好的结果。但是,这是一个经验法则,你应该根据数据来调整这个参数。

  1、模型的准确性

  在使用模型之前,应该使用测试集来评估模型。所谓模型的正确率,就是利用标记的数据,将预测的结果与标记的结果进行比较,计算出比较成功的比例:

  KNN。分数(x _ Test,y_test)打印(测试集分数:{:2f} .格式(assess _ model _ socre))

  使用模型的分数()函数,使用测试集进行评分,分数越高,模型越好。

  2,邻居个数

  如何确定邻居的个数,下面使用枚举法,逐个测试邻居的个数,并根据模型的分数()函数查看模型的正确率。

  importmglearn

  importmatplotlib.pyplot作为血小板计数

  来自sk学习。数据集导入负载_乳腺癌_癌症

  从sklearn.model_selection导入训练_测试_拆分

  来自sk学习。邻居导入邻居分类器

  癌症=负荷_乳房_癌症()

  x_train,x_test,y_train,y _ test=train _ test _ split(癌。数据,cancer.target,random_state=66)

  training_accuracy=[]

  test_accuracy=[]

  neighbors_settings=range(1,11)

  对于邻居设置中的n个邻居:

  KNN=近邻分类器(n _ neighbors)

  KNN。适合(x _火车,y _火车)

  训练_准确性。追加(KNN。score(x _ train,y_train))

  测试_准确性。追加(KNN。分数(x _ test,y_test))

  plt.plot(neighbors_settings,training_accuracy,label=Training Accuracy )

  plt.plot(neighbors_settings,test_accuracy,label=测试精度)

  plt.ylabel("准确性")

  plt.xlabel(n_neighbors )

  plt。图例()

  3,距离选择

  数据点之间的距离,计算距离的方法有:欧几里得(从容的招牌距离),"勤恳的跳跳糖"(土豪的橘子距离),最大值(jddmn距离),《曼哈顿》(绝对值距离)、堪培拉(兰式距离), 或勤恳的跳跳糖(优美的帽子距离)等。

  4,预测结果的确信概率

  查看分类的不确定度估计,使用模型的预测_概率()函数来查看模型预测的概率。

  参考文档:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: