K-Nearest Neighbors(K-近邻算法,简称KNN)是一种基本的监督学习算法,用于解决分类和回归问题。KNN的核心思想是基于距离度量,在特征空间中找到最近的K个样本,然后使用它们的标签进行决策。以下是KNN的基本概念和工作原理:
工作原理:
- 距离度量
KNN使用欧氏距离或其他距离度量方法来计算样本之间的距离。 - 选择K值
选择一个合适的K值,表示在决策时考虑的最近邻居的数量。 - 投票决策
对于分类问题,根据K个最近邻居中出现最频繁的类别进行决策;对于回归问题,根据K个最近邻居的平均值进行决策。
KNN的优缺点:
优点:
- 简单且易于理解。
- 适用于小型数据集和特征数较少的问题。
- 无需训练阶段,模型保存了整个训练集。
缺点:
- 对于大型数据集,预测速度较慢。
- 对于高维数据,容易受到维数灾难的影响。
- 对噪声和冗余特征敏感。
KNN通常在小型数据集和相对较简单的问题中表现良好,但在处理大型高维数据时可能会面临挑战。在实际应用中,合适的K值的选择和数据的预处理对KNN的性能影响较大。
需求:
预测哪些用户会购买SUV。
代码:
import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import confusion_matrix, accuracy_score, classification_report# 加载数据dataset = pd.read_csv('Social_Network_Ads.csv')X = dataset.iloc[:, [2, 3]].valuesy = dataset.iloc[:, 4].values# 划分数据集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)# 特征标准化sc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)# 创建并训练KNN模型k_value = 5classifier = KNeighborsClassifier(n_neighbors=k_value, metric='minkowski', p=2)classifier.fit(X_train, y_train)# 预测y_pred = classifier.predict(X_test)# 将预测值添加到数据集dataset['Predicted'] = classifier.predict(sc.transform(X))# 将包含预测值的数据集写入新的 CSV 文件dataset.to_csv('Social_Network_Ads_KNN_Pred.csv', index=False)# 混淆矩阵及模型评估cm = confusion_matrix(y_test, y_pred)accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred)# 展示混淆矩阵及模型评估结果print("Confusion Matrix:\n", cm)print("\nAccuracy:", accuracy)print("Classification Report:\n", report)
结果:
Accuracy: 0.93
结论:
看文件Social_Network_Ads_KNN_Pred.csv的Predicted列,预测结果基本满意。