匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

利用Python实现一个简单的机器学习算法——KNN算法

在现代的计算机时代,机器学习是一个越来越热门的话题。机器学习算法可以使用已知的数据来预测未知的结果,这在很多应用中非常有用。其中,KNN算法是一种简单但强大的机器学习算法,可以准确地对数据进行分类。

在本文中,我们将使用Python编写一个简单的KNN算法,该算法可以对数据进行分类。我们将从KNN算法的工作原理开始,然后介绍它的实现步骤。最后,我们将使用一个互联网上的数据集来测试我们的算法。

KNN算法的工作原理

KNN算法是一种监督式学习算法,它使用已知数据集来进行分类。在KNN算法中,K代表着最近邻居的数量,它是一个超参数,需要手动设置。算法的工作原理如下:

- 读取已知的数据集
- 测量新数据点与数据集中每个数据点的距离
- 选取最近的K个数据点
- 统计K个数据点的类别
- 将新数据点分配到最常见的类别

KNN算法的实现步骤

首先,我们需要导入必要的库。我们将使用numpy和pandas来操作数据集,使用sklearn中的train_test_split函数将数据集分为训练集和测试集,使用sklearn中的accuracy_score函数计算算法的准确性。

```python
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
```

然后,我们需要定义一个函数来计算两个数据点之间的距离。在KNN算法中,可以使用欧几里得距离来计算距离。

```python
def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))
```

接下来,我们需要定义我们的KNN类。我们的KNN类将具有以下方法:

- fit:用于训练数据。
- predict:用于预测新数据点的类别。

```python
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):
        predicted_labels = [self._predict(x) for x in X]
        return np.array(predicted_labels)

    def _predict(self, x):
        # 计算距离
        distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
        # 选择最近的k个点
        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]
```

在KNN类中,我们首先使用构造函数来设置我们的超参数k。我们还定义了fit方法来训练数据。该方法需要两个参数,分别是训练数据和对应的标签数据。我们还定义了predict方法来预测新数据点的类别。该方法需要一个参数,即新数据点的特征。我们还定义了一个私有方法_predict,该方法将实际计算距离,选择最近的K个点,并统计它们的类别,最后返回最常见的类别。

最后,我们需要使用数据集来测试我们的算法。我们将使用UCI机器学习库中的Iris数据集。该数据集包含150个数据点,分为三个花的品种。

```python
df = pd.read_csv('iris.csv')

X = df.drop('species', axis=1).values
y = df['species'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

clf = KNN(k=3)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

accuracy = accuracy_score(y_test, predictions)
print('Accuracy:', accuracy)
```

我们首先使用pandas库来读取数据集。我们然后将数据集中的特征和标签分别存储在X和y变量中。接下来,我们使用train_test_split函数将数据集分成训练集和测试集。我们实例化了KNN类,并使用fit方法将训练数据传递给算法。我们然后使用predict方法来预测测试数据集中的类别,并使用accuracy_score函数计算算法的准确性。

结论

本文中,我们使用Python编写了一个简单的KNN算法来分类数据。我们首先介绍了KNN算法的工作原理,然后详细介绍了它的实现步骤。最后,我们使用一个Iris数据集来测试我们的算法,并使用准确性来评估我们的算法。通过这个例子,我们可以看到KNN算法的实现非常简单,同时也非常强大。