鸢尾花机器学习复现说明

1.数据从哪来

https://scikit-learn.org/stable/api/index.html

我们使用scikit-learnAPI辅助我们进行整个实验。在这个API中会存有一些数据的下载链接,他们还将数据封装好了,我们加载数据时(iris = load_iris())会返回一个字典类型的整个数据集。通过对字典的不同键的点击进入,我们就可以实现数据的加载。

python 复制代码
from sklearn.datasets import load_iris

def load_data():
    iris = load_iris()
    x = iris.data
    y = iris.target
    print(iris.keys())
    '''print("数据集特征值为:\n",x)
    print("数据集标签为:\n",y)
    print("数据集描述为:\n",iris.DESCR)
    print("数据集特征值名称为:\n",iris.feature_names)
    print("数据集标签名称为:\n",iris.target_names)'''
    return x,y

2.有了数据,怎么去处理

在机器学习中,我们习惯将数据划分为测试集与训练集。sklearn中有一个函数可以起到这种效果。from sklearn.model_selection import train_test_split。

python 复制代码
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

当我们划分好测试集与训练集后,我们需要对特征进行一些特征工程的操作,特征工程的基本流程:特征提取,**特征预处理,**特征选择,特征降维,特征重组。

主要下一步我们要进行特征预处理。(标准化,归一化)

我们需要调用skearn中的预处理中的标准化类,然后实例化一个scaler。

第一步在训练集 上去fit_transform,因为我们需要从他们身上去学习到数据集的方差,均值是什么,然后再用在训练集 学到标准差方差去对测试集做标准化处理。

python 复制代码
from sklearn.preprocessing import StandardScaler  
    scaler = StandardScaler()
    x_train = scaler.fit_transform(x_train)
    x_test = scaler.transform(x_test)

3.完成特征处理后,还要做啥?

处理完特征我们就可以将特征塞入模型中进行处理了。sklearn提供了模型的一站式服务,我们只需要先import需要用的模型类,然后实例化类就可以使用了

python 复制代码
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()

这里我们没有填入参数,默认是有参数的。我们这里想用网格搜索和交叉验证的方法去求取我们模型的最佳参数与证明我们模型的鲁棒性。

在代码中网格搜索和交叉验证其实就是一行:

导入GridSearchCV,然后实例化GridSearchCV(实例化后的模型 ,需要搜索的参数字典,cv=打算分几折进行交叉验证)

python 复制代码
from sklearn.model_selection import train_test_split,GridSearchCV

grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(x_train, y_train)

当我们实例化后,还需要调用其中的fit方法才能真正地开始模型的训练。

训练完之后的结果都会保存在实例grid_search中。可以利用下面的代码去看看有啥东西。

python 复制代码
    print("开始进行网格搜索...")
    print("最佳参数:", grid_search.best_params_)
    print("最佳得分:", grid_search.best_score_)
    best_model = grid_search.best_estimator_
    y_pred = best_model.predict(x_test)
    accuracy = accuracy_score(y_test, y_pred)
    print("测试集上的准确率:", accuracy)

整体的代码在下面,作为机器学习的helloworld,这里只需要对算法明晰,清楚每一步在干嘛,这里面的一些重要参数即可。构建从1.数据获取。2.数据预处理(划分数据训练集与测试集)3.特征工程(主要是特征预处理)4.模型实例化与模型训练5.模型评估验证与可视化 这个流程熟稔于心即可!下面是一些散装代码。

python 复制代码
"""
Iris分类案例

1.加载数据
2.数据预处理
3.特征工程 -》特征提取 -》特征预处理
4.模型训练
5.模型评估
6.模型预测

"""

from sklearn.datasets import load_iris
import pandas as pd
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import seaborn as sns
import matplotlib.pyplot as plt



# 1.加载鸢尾花数据集,并且查看数据集
def load_data():
    iris = load_iris()
    x = iris.data
    y = iris.target
    print(iris.keys())
    '''print("数据集特征值为:\n",x)
    print("数据集标签为:\n",y)
    print("数据集描述为:\n",iris.DESCR)
    print("数据集特征值名称为:\n",iris.feature_names)
    print("数据集标签名称为:\n",iris.target_names)'''
    return x,y

def show_iris_data():



    # 将数据转换为DataFrame格式,便于数据处理
    iris = load_iris()
    # 数据转化为DataFrame格式
    iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
    iris_df['target'] = iris.target
    print(iris_df.head())
    # hue='target'表示根据类别进行颜色区分
    sns.lmplot(data=iris_df, x='sepal length (cm)', y='sepal width (cm)', hue='target', fit_reg=False)
    plt.title('Iris Dataset - Sepal Length vs Width')
    plt.tight_layout()
    plt.show()


def split_data():
    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)

def iris_case():
    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)
    scalar = StandardScaler()
    # 默认参数先去计算方差之类的数据,然后再进行转换
    x_train = scalar.fit_transform(x_train)
    # 直接对测试集进行转换
    x_test = scalar.transform(x_test)

    model = KNeighborsClassifier(n_neighbors=3)
    model.fit(x_train,y_train)
    y_pred = model.predict(x_test)
    print("预测结果为:\n",y_pred)
    accuracy = accuracy_score(y_test,y_pred)
    print("准确率为:\n",accuracy)
    

def iris_last():
    iris_data = load_iris()
    x, y = iris_data.data, iris_data.target
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
    # 特征工程 - 特征预处理
    scaler = StandardScaler()
    x_train = scaler.fit_transform(x_train)
    x_test = scaler.transform(x_test)

    model = KNeighborsClassifier()
    param_grid = {
        'n_neighbors': [i for i in range(1, 11)]
    }
    # 创建网格搜索对象
    grid_search = GridSearchCV(model, param_grid, cv=5)
    grid_search.fit(x_train, y_train)
    print("开始进行网格搜索...")
    print("最佳参数:", grid_search.best_params_)
    print("最佳得分:", grid_search.best_score_)
    best_model = grid_search.best_estimator_
    y_pred = best_model.predict(x_test)
    accuracy = accuracy_score(y_test, y_pred)
    print("测试集上的准确率:", accuracy)




if __name__ == "__main__":
    iris_last()
相关推荐
超的小宝贝几秒前
机器学习期末复习
深度学习·机器学习·强化学习
环黄金线HHJX.几秒前
拼音字母量子编程PQLAiQt架构”这一概念。结合上下文《QuantumTuan ⇆ QT:Qt》
开发语言·人工智能·qt·编辑器·量子计算
sonadorje6 分钟前
谈谈贝叶斯回归
人工智能·数据挖掘·回归
Python极客之家6 分钟前
基于深度学习的刑事案件智能分类系统
人工智能·python·深度学习·机器学习·数据挖掘·毕业设计·情感分析
工藤学编程9 分钟前
零基础学AI大模型之CoT思维链和ReAct推理行动
前端·人工智能·react.js
MARS_AI_9 分钟前
融资加持下的云蝠智能:大模型语音Agent重构企业通信新生态
人工智能·自然语言处理·重构·交互·信息与通信·agi
一棵开花的树,枝芽无限靠近你12 分钟前
【Pytorch】(一)使用 PyTorch 进行深度学习:60 分钟速成
人工智能·pytorch·深度学习
墨染天姬14 分钟前
【AI】OCR开源模型排行
人工智能·开源·ocr
幻云201014 分钟前
Python机器学习:从入门到资深
人工智能·python
泰迪智能科技17 分钟前
分享|企业数据挖掘平台产品功能
人工智能·数据挖掘