原理
K近邻(KNN)算法属于监督学习分类算法,主要用于解决分类问题。
输入:训练数据集,其中为实例的特征向量,为实例类别。
输出:实例所属的类别。
步骤:
- 选择参数 K。
- 计算未知实例与所有已知实例的距离。
- 选择最近的 K 个已知实例。
- 根据少数服从多数的原则进行投票,将未知实例归类为 K 个最近邻中最多数的类别。
总结:KNN算法没有明显的训练过程,训练阶段仅保存样本,训练开销为零。处理测试样本时才进行 KKK 值选择和距离计算,因此是一种懒惰学习算法。
K近邻算法的三个要素:
- 距离度量方法:用于计算测试样本与训练样本之间的相似度,常用的距离度量方法有欧氏距离、曼哈顿距离、明可夫斯基距离等。
- K值大小:决定选择多少个最近邻居。K值过小可能导致模型对噪声数据过于敏感,K值过大可能导致模型过于平滑,忽略了数据的局部结构。
- 分类的决策准则:根据距离最近的 KKK 个邻居对测试样本进行分类——多数表决法、加权多数表决法、概率分布法。
Skearn中的API
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score
def load_and_preprocess_data():
# 加载数据集
iris = load_iris()
# 数据标准化
standard = StandardScaler()
X = standard.fit_transform(iris.data)
return X, iris.target
def train_knn_classifier(x_train, y_train, n_neighbors=3):
# 模型训练
knn = KNeighborsClassifier(n_neighbors=n_neighbors)
knn.fit(x_train, y_train)
return knn
def evaluate_model(estimator, x_test, y_test):
# 利用模型进行预测
predictions = estimator.predict(x_test)
# 打印分类报告和准确率
print(classification_report(y_test, predictions))
print(f"Accuracy: {accuracy_score(y_test, predictions):.2f}")
if __name__ == '__main__':
# 1. 加载和预处理数据
X, y = load_and_preprocess_data()
# 2. 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. 训练模型
estimator = train_knn_classifier(x_train, y_train)
# 4. 评估模型
evaluate_model(estimator, x_test, y_test)
标签:iris,实例,近邻,算法,train,test,import,sklearn
From: https://blog.csdn.net/weixin_74254879/article/details/140425127