我重生了,上一世因为没有好好学习,流浪街头,这一世,饿哦要好好学习,逆天改命!
恰逢灵气复苏,我要键指天下,从挑战knn秘境开始!
前传
一、启程的准备(鸢尾花数据集)
传闻天地间生长着一丛鸢尾花,它是开启knn秘境的一把钥匙,有了它便能深入knn秘境。
传言:
鸢尾花数据集是机器学习和统计学中经典的多分类问题数据集之一。它包含了150个样本,每个样本代表一朵鸢尾花,共包括了3个不同种类的鸢尾花:Setosa、Versicolor和Virginica。每个样本包含了4个特征,分别是:
- 萼片长度(sepal length,单位:厘米)
- 萼片宽度(sepal width,单位:厘米)
- 花瓣长度(petal length,单位:厘米)
- 花瓣宽度(petal width,单位:厘米)
用远古秘籍的方法来召唤鸢尾花,书中记载在下。
1.引入库:
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
# 数据集包含特征和标签两部分,分别保存在data和target属性中
X = iris.data # 特征
y = iris.target # 标签
召唤的鸢尾花数据集需要用神器pandas来栽种才能存活,二需要用读入数据仪式才能栽种成功。
2.读入数据
首先使用load_iris()
函数加载鸢尾花数据集,然后使用pd.DataFrame()
函数创建一个数据框,将数据存储在其中。通过传递data
参数和columns
参数,我们将特征数据和特征名称存储在数据框中。接下来,我们通过使用iris.target
属性将鸢尾花的标签存储在数据框的新列target
中。最后,我们打印出数据框的前几行,以查看数据的格式。
import pandas as pd
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
# 创建数据框
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# 添加标签列
df['target'] = iris.target
# 打印前几行数据
print(df.head())
二、knn算法
准备好了鸢尾花,我们便可以出发去knn秘境,knn秘境是什么?人们都是这么说的:
1.knn算法
KNN算法(K-Nearest Neighbors)是一种基于实例的监督学习算法,用于分类和回归问题。它的主要思想是通过计算新样本与训练数据中已有样本之间的距离(如欧氏距离、曼哈顿距离等),找出与新样本最相似的K个邻居,然后根据这K个邻居的标签进行决策。
2.knn历险
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
def euclidean_distance(point1, point2):
return np.sqrt(np.sum((point1 - point2) ** 2))
def knn(X_train, y_train, X_test, k):
predictions = []
for test_point in X_test:
distances = []
for train_point, label in zip(X_train, y_train):
distance = euclidean_distance(test_point, train_point)
distances.append((distance, label))
distances.sort(key=lambda x: x[0])
neighbors = [label for (_, label) in distances[:k]]
prediction = max(set(neighbors), key=neighbors.count)
predictions.append(prediction)
return predictions
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 使用KNN算法进行分类
k = 3
y_pred = knn(X_train, y_train, X_test, k)
# 计算分类准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
使用sklearn
库中的load_iris
函数加载鸢尾花数据集,并使用train_test_split
函数将数据集拆分为训练集和测试集。然后定义了一个欧氏距离函数euclidean_distance
来计算样本之间的距离。接下来,实现了KNN算法中的关键步骤:首先计算测试样本与训练样本之间的距离,然后根据距离找出最近的K个邻居,并根据邻居的标签进行预测。最后,使用accuracy_score
函数计算分类准确率。
结果:
Accuracy: 1.0
该结果表示,在测试集上使用KNN算法进行鸢尾花分类时,模型的准确率为100%。也就是说,对于测试集中的每个样本,模型都能够正确地将其分类到对应的鸢尾花种类中。这是一个很好的结果,但在实际应用中需要更加谨慎地评估模型性能,以避免出现过拟合等问题。
总结
实验结果:经过实验,得到了模型在测试集上的准确率为100%。这意味着,在该数据集上,KNN算法能够完美地将鸢尾花样本分类到正确的类别中。
总结而言,使用KNN算法对鸢尾花数据集进行分类取得了非常好的结果。然而,在实际应用中,还需要进一步考虑模型的泛化能力、参数选择等因素,并且在更大规模的数据集上进行验证,以确保模型的可靠性和稳定性。