重生之从0开始的机器学习生涯(knn算法)

我重生了,上一世因为没有好好学习,流浪街头,这一世,饿哦要好好学习,逆天改命!

恰逢灵气复苏,我要键指天下,从挑战knn秘境开始!


前传

重生之从0开始的机器学习修行(安装篇)


一、启程的准备(鸢尾花数据集)

传闻天地间生长着一丛鸢尾花,它是开启knn秘境的一把钥匙,有了它便能深入knn秘境。

传言:

鸢尾花数据集是机器学习和统计学中经典的多分类问题数据集之一。它包含了150个样本,每个样本代表一朵鸢尾花,共包括了3个不同种类的鸢尾花:Setosa、Versicolor和Virginica。每个样本包含了4个特征,分别是:

  1. 萼片长度(sepal length,单位:厘米)
  2. 萼片宽度(sepal width,单位:厘米)
  3. 花瓣长度(petal length,单位:厘米)
  4. 花瓣宽度(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算法对鸢尾花数据集进行分类取得了非常好的结果。然而,在实际应用中,还需要进一步考虑模型的泛化能力、参数选择等因素,并且在更大规模的数据集上进行验证,以确保模型的可靠性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值