[Python] scikit-learn - K近邻算法介绍和使用案例

什么是K近邻算法?

K近邻算法(K-Nearest Neighbors,简称KNN)是一种基于实例的学习方法,主要用于分类和回归任务。它的基本思想是:给定一个训练数据集,对于一个新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数类别就是该输入实例的类别。

思路:

  1. 计算输入实例与训练数据集中每个实例之间的距离。
  2. 对距离进行排序,找到距离最近的K个实例。
  3. 根据这K个实例的类别进行投票,得到输入实例的类别。

K近邻算法使用场景和注意事项

K近邻算法(K-Nearest Neighbors,简称KNN)是一种基于实例的学习方法,主要用于分类和回归任务。它的使用场景包括:

  1. 数据集较小的情况:当数据集较小时,KNN算法可以快速地进行训练和预测,而不需要大量的计算资源。
  2. 数据集中存在噪声的情况:由于KNN算法是基于实例的,因此它对数据集中的噪声具有一定的容忍度。
  3. 数据集中存在异常值的情况:KNN算法在处理异常值时,会根据邻近实例的类别来进行投票,从而降低了异常值对结果的影响。
  4. 数据集中存在不平衡类别的情况:KNN算法在处理不平衡类别的数据集时,可以通过调整K值来平衡各个类别之间的样本数量。

在使用KNN算法时,需要注意以下几点:

  1. 选择合适的K值:K值的选择对算法的性能有很大影响。通常情况下,可以通过交叉验证等方法来选择合适的K值。
  2. 特征选择:KNN算法对特征的数量和质量要求较高,因此需要对特征进行选择和预处理,以提高算法的性能。
  3. 距离度量:KNN算法需要计算实例之间的距离,因此需要选择合适的距离度量方法,如欧氏距离、曼哈顿距离等。
  4. 性能评估:为了确保算法的性能,需要对算法进行性能评估,如准确率等指标。

K近邻算法python实现

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

import numpy as np
from collections import Counter

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个实例的索引
        k_indices = np.argsort(distances)[:self.k]
        # 根据这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]


data = load_iris()
X, y = data.data, data.target
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)
predictions = knn.predict(X_test)

print("Accuracy:", accuracy_score(y_test, predictions))

scikit-learn中的K近邻算法

K近邻算法用于分类任务

sklearn.neighbors.KNeighborsClassifier — scikit-learn 1.4.0 documentation

 

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier

data = load_iris()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

knc = KNeighborsClassifier(n_neighbors=3)
knc.fit(X_train, y_train)
predictions = knc.predict(X_test)

print("Accuracy:", accuracy_score(y_test, predictions))

在这个示例中,我们首先从scikit-learn库中加载了iris花卉数据集,并将其划分为训练集和测试集。然后,我们创建了一个KNeighborsClassifier对象,并设置了K值为3。接下来,我们使用训练集对模型进行训练,并使用测试集进行预测。最后,我们计算了预测结果的准确度。 

K近邻算法用于回归任务

sklearn.neighbors.KNeighborsRegressor — scikit-learn 1.4.0 documentation

 

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error

# 加载iris花卉数据集
data = load_iris()
X = data.data
y = data.target

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建KNeighborsRegressor对象,设置K值为3
knn = KNeighborsRegressor(n_neighbors=3)

# 使用训练集对模型进行训练
knn.fit(X_train, y_train)

# 使用测试集进行预测
y_pred = knn.predict(X_test)

# 计算预测结果的均方误差
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)

在这个示例中,我们首先从scikit-learn库中加载了iris花卉数据集,并将其划分为训练集和测试集。然后,我们创建了一个KNeighborsRegressor对象,并设置了K值为3。接下来,我们使用训练集对模型进行训练,并使用测试集进行预测。最后,我们计算了预测结果的均方误差。

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 很抱歉,我是AI语言模型,无法提供代码。以下是使用scikit-learn库实现k近邻算法对forge数据集进行回归的步骤: 1. 导入所需库和数据集 ```python from sklearn.neighbors import KNeighborsRegressor from sklearn.datasets import make_regression X, y = make_regression(n_samples=100, n_features=2, noise=10, random_state=0) ``` 2. 创建K近邻回归模型 ```python knn = KNeighborsRegressor(n_neighbors=5) ``` 3. 拟合模型并进行预测 ```python knn.fit(X, y) y_pred = knn.predict(X) ``` 4. 评估模型性能 ```python from sklearn.metrics import mean_squared_error mse = mean_squared_error(y, y_pred) print("Mean Squared Error:", mse) ``` 以上是使用scikit-learn库实现k近邻算法对forge数据集进行回归的基本步骤,具体实现可参考scikit-learn官方文档。 ### 回答2: 使用k近邻算法对Forge数据集进行回归可以帮助我们根据Forge数据集中的样本数据推断出新的数据,以预测未知的样本数据。该任务可以使用Scikit-learn库的KNeighborsRegressor实现。下面是实现该任务的详细步骤: 1. 导入必要的库和数据集 ```python import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_regression from sklearn.neighbors import KNeighborsRegressor from sklearn.model_selection import train_test_split # 加载数据集 X, y = make_regression(n_samples=100, n_features=2, noise=10) ``` 2. 分离训练集和测试集 ```python X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) ``` 3. 创建K近邻回归模型 ```python # 创建K近邻回归模型 knn = KNeighborsRegressor(n_neighbors=5) ``` 4. 训练模型 ```python # 训练模型 knn.fit(X_train, y_train) ``` 5. 预测测试集 ```python # 预测测试集 y_pred = knn.predict(X_test) ``` 6. 评估模型性能 ```python # 评估模型性能 print("Test set R^2: {:.2f}".format(knn.score(X_test, y_test))) ``` 7. 可视化结果 ```python # 可视化结果 plt.scatter(y_test, y_pred) plt.plot([-100, 100], [-100, 100], '--k') plt.axis('tight') plt.xlabel('True value') plt.ylabel('Predicted value') plt.show() ``` 完整代码: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_regression from sklearn.neighbors import KNeighborsRegressor from sklearn.model_selection import train_test_split # 加载数据集 X, y = make_regression(n_samples=100, n_features=2, noise=10) # 分离训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # 创建K近邻回归模型 knn = KNeighborsRegressor(n_neighbors=5) # 训练模型 knn.fit(X_train, y_train) # 预测测试集 y_pred = knn.predict(X_test) # 评估模型性能 print("Test set R^2: {:.2f}".format(knn.score(X_test, y_test))) # 可视化结果 plt.scatter(y_test, y_pred) plt.plot([-100, 100], [-100, 100], '--k') plt.axis('tight') plt.xlabel('True value') plt.ylabel('Predicted value') plt.show() ``` 运行以上代码可以在Scikit-learn使用k近邻算法实现对Forge数据集进行回归预测。 ### 回答3: K近邻算法是一种很常用的算法,常用于分类回归问题中。scikit-learn是一个Python的机器学习库,很方便使用,可以轻松实现K近邻算法。 Forge数据集是一个人工创建的用于分类回归问题的数据集数据集是二维的,包含两个特征值和一个目标变量值。我们用K近邻算法对目标变量进行回归分析。 代码如下: ```python # 导入库和数据集 from sklearn.datasets import make_regression from sklearn.neighbors import KNeighborsRegressor from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import numpy as np # 创建数据集 X, y = make_regression(n_samples=100, n_features=2, noise=10) # 数据集的划分 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # 实例化KNN模型 knn = KNeighborsRegressor(n_neighbors=3) # 拟合模型 knn.fit(X_train, y_train) # 预测结果 y_pred = knn.predict(X_test) # 打印预测结果和实际结果 print('预测结果:', y_pred) print('实际结果:', y_test) # 画图展示 plt.scatter(X_test[:, 0], y_test, color='black', label='实际结果') plt.scatter(X_test[:, 0], y_pred, color='blue', label='预测结果') plt.legend() plt.show() ``` 其中,make_regression函数是用来生成数据集的。参数如下: - n_samples:生成样本数,默认100; - n_features:生成样本特征数,默认10; - noise:样本随机噪声,默认0.0。 train_test_split函数用来划分样本数据集。返回分别是训练集和测试集的特征数据和目标数据。在实例化KNN模型时,我们需要设置K值,即n_neighbors参数。我们选用了3,表示模型会以目标变量最接近的3个点作为预测结果。 拟合模型后,我们进行预测和实际结果的对比,并且使用plt.scatter绘制出预测结果和实际结果的散点图。 总之,使用scikit-learn库中的KNN模型,对于回归问题需要通过KNeighborsRegressor类来实现,非常方便。而对于分类问题,则需要使用KNeighborsClassifier类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老狼IT工作室

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值