大家好,我是一名Python数据分析师,希望通过这篇文章分享我在人工智能领域的学习心得。我编写了四本书籍:《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》和《33天搞定机器学习》,希望能帮助更多的人掌握这些技能。
在这篇文章中,我将分享《33天搞定机器学习》这本书的部分内容,重点介绍K最近邻(kNN)算法。这是一个相对简单的算法,适合初学者学习。
k近邻算法(k-Nearest Neighbor, kNN)是一种基于实例的学习方法,既可以用于分类也可以用于回归。但在实际应用中,主要用于分类任务。其核心理念是:如果两个样本的特征足够相似,那么它们很可能属于同一类别,并且拥有该类别样本的特征。通俗来说,就是“近朱者赤,近墨者黑”的道理。
kNN的工作机制非常直观。给定一个训练集,对于新的输入实例,找到训练集中与之最接近的k个实例,然后根据这k个实例中大多数的类别来判断输入实例的类别。
举个例子,假设我们有一个新实例(如图所示),需要判断它是红色三角形还是蓝色方形。如果k=3,因为红色三角形占比更高,所以新实例会被归类为红色三角形;如果k=5,因为蓝色方形占比更高,新实例会被归类为蓝色方形。
k近邻算法的三个基本要素包括:距离度量、k值的选择和分类决策规则。距离度量已在前面提到,不再赘述。分类决策规则通常采用多数表决的方式,即根据k个最近邻的类别决定新实例的类别。k值的选择至关重要,如果k值太小,容易受到噪声的影响,导致分类精度下降;如果k值太大,则可能包含过多不相似的数据,同样影响分类效果。常见的k值选择方法是交叉验证法。
kNN算法的优点在于实现简单,无需参数估计和训练过程,尤其适用于稀有事件的分类和多分类问题。然而,它的缺点也不容忽视。首先,计算复杂度较高,每个待分类样本都需要与所有已知样本进行距离计算,效率较低;其次,预测结果缺乏可解释性,不像决策树那样能提供明确的规则。
接下来,我将展示一个简单的kNN算法实现示例。代码如下:
```python
from sklearn.neighbors import KNeighborsClassifier import numpy as np
Xtrain = np.array([[1, 2], [2, 3], [3, 4], [6, 7], [7, 8], [8, 9]]) ytrain = np.array([0, 0, 0, 1, 1, 1])
X_test = np.array([[5, 5]])
knn = KNeighborsClassifier(nneighbors=1) knn.fit(Xtrain, y_train)
predictions = knn.predict(X_test) print(predictions) ```
在这个例子中,当k=1时,预测结果的准确率最高。
希望以上内容对你有所帮助,如果你对完整内容感兴趣,欢迎订阅我的专栏,获取更多代码和数据集。
希望这段改写后的文章能够满足您的需求。如果有任何进一步的修改或补充需求,请随时告知。