机器学习相关函数(二)——knn

本文深入解析了机器学习中k近邻分类器的工作原理,包括如何通过mglearn库进行可视化展示,介绍了sklearn库中train_test_split函数的使用,详细说明了如何将数据集划分为训练集和测试集,以及KNeighborsClassifier的参数设置与应用,为读者提供了丰富的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、mglearn.plots.plot_knn_classification()

简介

展示k近邻分类器的工作原理

例子

>>> mglearn.plots.plot_knn_classification

>>> mglearn.plots.plot_knn_classification(n_neighbors=3)

 

2、sklearn.model_selection.train_test_spilt()

参考网址:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

简介

将数据集快速拆分成训练集和测试集

基本形式

sklearn.model_selection.train_test_spilt(*arrays,**options)

参数

参数作用
*arrays可以放入列表、数组、稀疏矩阵、dataframe 
test_size测试集的比例(0.0~1.0)0.25(默认值)
train_size训练集的比例(0.0~1.0)None(默认值)
random_state类似于随机种子的存在。如果输入一个数,那么之后每次再使用这个函数+这个随机种子的数,分的内容都是一样的。None(默认值)
shuffle把数据集打乱True(默认值)
stratify分层None(默认值)

例子

>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> X, y = np.arange(10).reshape((5, 2)), range(5)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>>
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, test_size=0.33, random_state=42)
...
>>> X_train
array([[4, 5],
       [0, 1],
       [6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
       [8, 9]])
>>> y_test
[1, 4]
>>>
>>> train_test_split(y, shuffle=False)
[[0, 1, 2], [3, 4]]

 

3、sklean.neighbors.KNeighborsClassifier()

参考网址:

https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier.fit

简介

实现k近邻投票的分类器

基本形式

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5weights=’uniform’algorithm=’auto’leaf_size=30p=2metric=’minkowski’metric_params=Nonen_jobs=None**kwargs)

参数

参数作用
n_neighbors选择邻居的个数5(默认值)
weights用于预测阶段的权重函数

1 - 'uniform'(默认值,所有邻居有相同的权重)

2 - 'distance'(距离越近的邻居权重越大)

3 - [callable](一个用户定义的函数,它接受一个距离数组,并返回一个包含权重的相同形状的数组)

algorithm

用于计算最近邻居的算法

1 - 'auto'(默认值,根据fit的值确定合适的算法)

2 - 'balltree'

3 - 'KDTree'

4 - 'brute'

leaf_size传递给BallTree或KDTree的叶子规模。30(默认值)
p功率参数2(默认值)
metric用于树的距离度量'minkowski'(默认值)
metric_params度量函数的其他关键字参数None(默认值)
n_jobs并行作业数

None(默认值)

例子

>>> from sklearn.neighbors import KNeighborsClassifier
>>> clf = KNeighborsClassifier(n_neighbors=3)

 

4、fit()

简介

使用X作为训练数据并使用y作为目标值来拟合模型

基本形式

fit(X, y)

例子

>>> clf.fit(X_train, y_train)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1, n_neighbors=3, p=2,
           weights='uniform')

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### KNN算法在机器学习中的实现与应用 #### 一、KNN算法简介 K近邻(K-Nearest Neighbor, KNN)是一种基本分类与回归方法。该算法的核心思想在于通过计算待测样本与训练集中各个样本的距离,选取距离最小的前K个邻居,并依据这些邻居的信息来进行决策。对于分类问题而言,则是根据多数表决原则决定新实例所属类别;而对于回归问题来说,则通常采用这K个最接近的数据点的目标属性平均值作为预测结果。 #### 、R语言下的具体实践案例 针对鸢尾花数据集的应用展示了如何利用基础函数完成整个流程而无需依赖额外包的支持[^2]。在这个例子中,通过对不同特征维度间欧氏距离或其他度量方式的选择实现了对未知样本的有效识别。这种做法不仅有助于理解原理本身,同时也锻炼了编程技巧以及解决实际问题的能力。 ```r # 加载必要的库并读入数据 library(ggplot2) data(iris) head(iris) # 数据预处理... set.seed(1234) trainIndex <- sample(seq_len(nrow(iris)), size = floor(.7 * nrow(iris))) trainingData <- iris[trainIndex, ] testingData <- iris[-trainIndex, ] # 定义knn函数用于后续调用 knnPredict <- function(trainSet, testInstance, labels, k){ distances <- sqrt(rowSums((t(t(trainSet[,1:4]) - as.numeric(testInstance)))^2)) sortedDistIndices <- order(distances)[1:k] classCounts <- table(labels[sortedDistIndices]) return(names(which.max(classCounts))) } predictions <- sapply(as.matrix(testingData[,1:4]), knnPredict, trainSet=as.matrix(trainingData[,1:4]), labels=trainingData$Species,k=3L) confusionMatrix <- table(predictions,factor(testingData$Species)) print(confusionMatrix) ``` 上述代码片段演示了一个完整的基于自定义逻辑而非第三方工具包构建KNN模型的过程,包括但不限于数据分割、相似性测量及最终评估等方面的工作。 #### 三、应用场景探讨 尽管存在诸如计算复杂度较高等局限之处,但在某些特定条件下依然能够展现出独特价值: - **低维空间**:当输入变量数量较少时,性能表现良好; - **多模态分布**:可以很好地适应具有多个峰值的概率密度函数所描述的现象; - **快速原型开发**:由于易于理解和编码特性,在初期探索阶段可作为一种高效手段迅速验证想法可行性[^3]。 综上所述,虽然与其他更先进的技术相比可能显得不够先进,但凭借其实现简便性和灵活性依旧占据着不可替代的地位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值