Python监督学习的k-最近邻域算法

Tavish Aggarwal.

S甚至我们已经与机器学习的先决条件一起使用。我们涵盖了解决机器学习问题所需的一些重要概念。如果您错过了这些帖子,我建议您通过 机器学习概念.

在这里,我们将专注于监督机器学习。如果您不确定解决机器学习问题的各种技术。我建议你通过帖子 机器学习简介 获得高水平的理解。

让我们开始吧。

监督学习

学习是我们想要预测的价值或结果在训练数据(标记数据)内。和我们想要学习的数据中的价值被称为 目标 或者 依赖 多变的 或者 响应变量.

数据集中的所有其他列被称为 特征 or 预测变量 或者 独立变量.

监督学习分为两类:

  1. 澄清:在这里,我们的目标变量包括类别。

  2. 回归:在这里,我们的目标变量是连续的,我们通常会尝试找出曲线的行。

正如我们所知,要进行监督学习,我们需要标记数据。我们如何获得标记数据?有各种方法可以获得标记数据:

  1. 历史标记数据

  2. 实验获取数据:我们可以执行实验以生成标记的数据,如A / B测试

  3. 人群采购

现在是时候了解可用于解决监督机器学习问题的算法了。在这篇文章中,我们将使用流行的Scikit-Granst-Greatal包。

笔记: 还有很少的包装,也很少像TensoRflow,Keras等)来执行监督学习。

k最近邻算法

该算法用于解决分类模型问题。 k最近邻居或k-nn算法基本上创建了一个虚构的边界以对数据进行分类。当新数据点进入时,算法将尝试将其预测到最近的边界线。

因此,较大的k值意味着略微曲线的分离曲线,导致更复杂的模型。虽然,较小的k值往往会过度使用数据并导致复杂的模型。

笔记: 在分析数据集时具有正确的k值是非常重要的,以避免数据集的过度装备和填充。

使用K-Collect Exband算法我们适合历史数据(或培训模型)并预测未来。

k最近邻算法的示例

考虑下面显示的示例:

# Import necessary modules
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# Loading data
irisData = load_iris()

# Create feature and target arrays
X = irisData.data
y = irisData.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)

knn = KNeighborsClassifier(n_neighbors=7)

knn.fit(X_train,y_train)

# Predict on dataset which model has not seen before
print(knn.predict(X_test))

在上面显示的示例中,执行以下步骤:

  1. k-collect邻算法从Scikit-Groods包导入。
  2. 创建功能和目标变量。
  3. 将数据分成培训和测试数据。
  4. 使用邻居值生成K-NN模型。
  5. 火车或将数据拟合到模型中。
  6. 预测未来。

我们已经看到了我们如何使用K-NN算法来解决监督机器学习问题。但如何衡量模型的准确性?

考虑下面显示的示例,我们预测了上述模型的性能:

# Import necessary modules
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# Loading data
irisData = load_iris()

# Create feature and target arrays
X = irisData.data
y = irisData.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)

knn = KNeighborsClassifier(n_neighbors=7)

knn.fit(X_train,y_train)

# Calculate the accuracy of the model
print(knn.score(X_test, y_test))

模型准确性

到目前为止,一切都很好。但是如何为数据集决定正确的k值?显然,我们需要熟悉数据来获取预期的K值范围,但要获得所需的k值,我们需要为每个预期的k值测试模型。请参阅下面显示的示例:

# Import necessary modules
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt

irisData = load_iris()

# Create feature and target arrays
X = irisData.data
y = irisData.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)

neighbors = np.arange(1, 9)
train_accuracy = np.empty(len(neighbors))
test_accuracy = np.empty(len(neighbors))

# Loop over K values
for i, k in enumerate(neighbors):
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train,y_train)
    
    # Compute traning and test data accuracy
    train_accuracy[i] = knn.score(X_train,y_train)
    test_accuracy[i] = knn.score(X_test,y_test)

# Generate plot
plt.plot(neighbors, test_accuracy, label = 'Testing dataset Accuracy')
plt.plot(neighbors, train_accuracy, label = 'Training dataset Accuracy')
plt.legend()
plt.xlabel('n_neighbors')
plt.ylabel('Accuracy')
plt.show()

输出

Python监督学习的k-最近邻域算法

这里在上面所示的示例中,我们正在创建一个曲线,以便看到我们具有高精度的k值。

笔记: 这是一种不使用行业范围的技术来选择N_Neighbors的正确值。相反,我们做HyperParameter调整以选择提供最佳性能的值。我们将在未来的帖子中覆盖这一点。

概括

在这篇文章中,我们了解了哪些监督学习是什么以及它的类别是什么。在对监督学习进行基本了解之后,我们探索了用于解决监督机器学习问题的K-最近邻算法。我们还探讨了衡量模型的准确性。

在即将到来的帖子中,我们将理解一些用于解决机器学习问题的算法。 

免责声明 - 我将很快发布Geeksforgeeks的这篇文章。

 

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个数据科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。