html
掌握 Python 中 K 最近邻(KNN)可视化:全面指南
简介
在机器学习领域,K 最近邻(KNN)算法因其在分类任务中的简便性和高效性而脱颖而出。然而,理解和解释 KNN 的决策边界可能具有挑战性,尤其是在处理高维数据时。这时,可视化成为一个强大的工具。在本全面指南中,我们将深入探讨如何使用 Python 进行 KNN 可视化,利用诸如 mlxtend
和 matplotlib
等库。通过阅读本文,您将掌握创建 KNN 模型有洞察力的可视化表示的知识。
目录
了解 K 最近邻(KNN)及其可视化
K 最近邻(KNN)是什么?
KNN 是一种非参数、基于实例的学习算法,用于分类和回归任务。其运作原理是相似的数据点在特征空间中可能彼此接近。对于分类,KNN 会将类别分配给其 K 个最近邻中最常见的类别。
为何要可视化 KNN?
可视化有助于:
- 解释模型行为: 理解 KNN 如何基于特征空间做出决策。
- 识别过拟合或欠拟合: 可视化模式可以揭示模型是否具有良好的泛化能力。
- 比较特征影响: 观察哪些特征对决策边界贡献最大。
设置您的 Python 环境
在深入 KNN 可视化之前,确保您的 Python 环境已安装必要的包。
所需包:
pandas
:数据操作和分析。
numpy
:数值计算。
scikit-learn
:机器学习算法和工具。
mlxtend
:机器学习的扩展包。
matplotlib
:绘图和可视化。
安装命令:
1
pip install pandas numpy scikit-learn mlxtend matplotlib
数据预处理:准备您的数据集
一个准备充分的数据集对于构建有效的 KNN 模型至关重要。我们将使用这个例子中的 澳大利亚天气数据集。
1. 导入库和加载数据
1234567891011121314
import pandas as pdimport numpy as npimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.impute import SimpleImputerfrom sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScalerfrom sklearn.feature_selection import SelectKBest, chi2from sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import accuracy_scorefrom mlxtend.plotting import plot_decision_regionsimport matplotlib.pyplot as plt # Load datasetdata = pd.read_csv('weatherAUS.csv')
2. 探索数据
1
data.tail()
输出:
123
Date Location MinTemp MaxTemp Rainfall Evaporation ... Humidity3pm Pressure9am ...142188 2017-06-20 Uluru 3.5 21.8 0.0 NaN ... 27.0 1024.7 ......
3. 处理缺失数据
数值特征:
123
numerical_cols = data.select_dtypes(include=['int64', 'float64']).columnsimp_mean = SimpleImputer(strategy='mean')data[numerical_cols] = imp_mean.fit_transform(data[numerical_cols])
分类特征:
123
string_cols = data.select_dtypes(include=['object']).columnsimp_freq = SimpleImputer(strategy='most_frequent')data[string_cols] = imp_freq.fit_transform(data[string_cols])
4. 编码分类变量
1234567891011
def LabelEncoderMethod(series): le = LabelEncoder() return le.fit_transform(series) # Encode target variabledata['RainTomorrow'] = LabelEncoderMethod(data['RainTomorrow']) # One-Hot Encode categorical featuresX = data.drop(['RainTomorrow', 'RISK_MM'], axis=1)X = pd.get_dummies(X, drop_first=True)y = data['RainTomorrow']
5. 特征选择
1234
kbest = SelectKBest(score_func=chi2, k=10)scaler = StandardScaler()X_scaled = scaler.fit_transform(X)X_selected = kbest.fit_transform(X_scaled, y)
6. 分割数据集
1
X_train, X_test, y_train, y_test = train_test_split(X_selected, y, test_size=0.20, random_state=1)
构建和训练 KNN 模型
在数据预处理和分割之后,接下来是构建 KNN 分类器。
1. 初始化和训练模型
12
knn_classifier = KNeighborsClassifier(n_neighbors=3)knn_classifier.fit(X_train, y_train)
2. 评估模型性能
123
y_pred = knn_classifier.predict(X_test)accuracy = accuracy_score(y_pred, y_test)print(f"模型准确率: {accuracy:.2f}")
输出:
1
模型准确率: 0.80
可视化决策边界
可视化有助于理解 KNN 模型如何基于所选特征区分不同的类别。
1. 选择两个特征进行可视化
由于决策边界在二维空间中更易于可视化,我们将特征选择限制为前两个特征。
12
kbest = SelectKBest(score_func=chi2, k=2)X_selected = kbest.fit_transform(X_scaled, y)
2. 再次分割数据集
1
X_train, X_test, y_train, y_test = train_test_split(X_selected, y, test_size=0.20, random_state=1)
3. 特征缩放
123
scaler = StandardScaler(with_mean=False)X_train = scaler.fit_transform(X_train)X_test = scaler.transform(X_test)
4. 重新训练模型
1
knn_classifier.fit(X_train, y_train)
5. 绘制决策区域
123456
plt.figure(figsize=(10,6))plot_decision_regions(X_train, y_train, clf=knn_classifier, legend=2)plt.xlabel('特征 1')plt.ylabel('特征 2')plt.title('KNN 决策边界,k=3')plt.show()
输出:

注意: 请将图片链接替换为您环境中生成的实际图表。
解释可视化
决策边界图展示了 KNN 分类器如何基于选择的两个特征区分不同的类别。每个区域代表模型预测某一特定类别的区域。边界附近的数据点表明模型的预测对特征值的变化更为敏感。
关键见解:
- 边界形状: KNN 的边界可以是非线性的,并且对 K 值敏感。
- 类别重叠: 类别重叠的区域可能导致分类错误。
- K 值的影响: 较小的 K 导致更灵活的边界,而较大的 K 则使边界更加平滑。
结论
可视化 K 最近邻算法为其决策过程提供了宝贵的见解。通过将特征空间限制在二维,您可以有效地解释模型如何区分类别。虽然可视化是一个强大的工具,但结合准确率、精确率和召回率等稳健的模型评估指标,以确保全面的理解和性能评估也是至关重要的。
额外资源
元描述:
释放 Python 中 K 最近邻(KNN)可视化的力量。本全面指南涵盖数据预处理、模型训练和使用 scikit-learn 及 mlxtend 库绘制决策边界。
关键词:
KNN 可视化,K 最近邻 Python,决策边界图,机器学习可视化,scikit-learn KNN,mlxtend 绘制决策区域,Python 数据预处理,KNN 特征选择,KNN 模型准确率