Python实现kNN算法的代码
kNN算法是一种常用的机器学习算法,它可以用于分类和回归问题。本文中,我们将介绍如何使用Python实现kNN算法的代码。我们分为以下几个步骤:
- 加载数据集
- 数据预处理
- 定义kNN算法
- 示例说明
步骤1:加载数据集
在实现kNN算法之前,我们需要加载数据集。在这个例子中,我们将使用Iris数据集。我们可以使用以下代码加载数据集:
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
在这个示例中,我们首先导入load_iris函数,它可以加载Iris数据集。然后,我们使用load_iris函数加载数据集,并将特征矩阵存储在X变量中,将标签存储在y变量中。
步骤2:数据预处理
在加载数据集之后,需要对数据进行预处理。在这个例子中,我们将使用标准化来预处理数据。我们可以使用以下代码对数据进行标准化:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
在这个示例中,我们首先导入StandardScaler类,它可以用于标准化数据。然后,我们创建一个名为scaler的StandardScaler对象,并使用fit_transform方法对特征矩阵X进行标准化。
步骤3:定义kNN算法
在定义数据集和预处理数据之后,我们可以开始实现kNN算法。在这个例子中,我们将使用欧几里得距离来计算样本之间的距离。我们可以使用以下代码定义kNN算法:
import numpy as np
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2) ** 2))
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
在这个示例中,我们首先定义了一个名为euclidean_distance的函数,它可以计算两个样本之间的欧几里得距离。然后,我们定义了一个名为KNN的类,它表示kNN算法。我们使用fit方法来训练模型,使用predict方法来预测新样本的标签。在_predict方法中,我们计算新样本与训练集中所有样本之间的距离,并选择k个最近的样本。然后,我们使用Counter类来计算k个最近样本中出现最多的标签,并将其作为预测标签。
步骤4:示例说明
示例1:使用kNN算法进行分类
在这个示例中,我们将使用kNN算法进行分类。我们可以使用以下代码运行kNN算法:
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
knn = KNN(k=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
在这个示例中,我们首先使用train_test_split函数将数据集分为训练集和测试集。然后,我们创建一个名为knn的KNN对象,并使用fit方法训练模型。最后,我们使用predict方法预测测试集的标签,并使用accuracy_score函数计算模型的准确率。
示例2:调整kNN算法的k值
在这个示例中,我们将调整kNN算法的k值,并比较不同k值下的性能。我们可以使用以下代码运行kNN算法:
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
for k in range(1, 11):
knn = KNN(k=k)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("k:", k, "Accuracy:", accuracy)
在这个示例中,我们首先使用train_test_split函数将数据集分为训练集和测试集。然后,我们使用for循环比较不同k值下的性能。在每个k值下,我们创建一个名为knn的KNN对象,并使用fit方法训练模型。最后,我们使用predict方法预测测试集的标签,并使用accuracy_score函数计算模型的准确率。我们在每个k值下打印准确率。
总结
在本文中,我们介绍了如何使用Python实现kNN算法的代码。我们首先加载数据集,然后使用标准化对数据进行预处理。最后,我们定义了kNN算法,并提供了两个例说明,分别演示了如何使用kNN算法进行分类和如何调整kNN算法的k值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python实现kNN算法的代码 - Python技术站