侧边栏壁纸
    • 累计撰写 296 篇文章
    • 累计收到 520 条评论
    Python机器学习- 鸢尾花分类
    我的学记|刘航宇的博客

    Python机器学习- 鸢尾花分类

    刘航宇
    2023-07-23 / 0 评论 / 122 阅读 / 正在检测是否收录...

    1、描述

    请编写代码实现train_and_predict功能,实现能够根据四个特征对三种类型的鸢尾花进行分类。
    train_and_predict函数接收三个参数:
    train_input_features—二维NumPy数组,其中每个元素都是一个数组,它包含:萼片长度、萼片宽度、花瓣长度和花瓣宽度。
    train_outputs—一维NumPy数组,其中每个元素都是一个数字,表示在train_input_features的同一行中描述的鸢尾花种类。0表示鸢尾setosa,1表示versicolor,2代表Iris virginica。
    prediction_features—二维NumPy数组,其中每个元素都是一个数组,包含:萼片长度、萼片宽度、花瓣长度和花瓣宽度。
    该函数使用train_input_features作为输入数据,使用train_outputs作为预期结果来训练分类器。请使用训练过的分类器来预测prediction_features的标签,并将它们作为可迭代对象返回(如list或numpy.ndarray)。结果中的第n个位置是prediction_features参数的第n行。

    2、code

    # 导入numpy库,用于处理多维数组
    import numpy as np
    # 导入sklearn库中的数据集、模型选择、度量和朴素贝叶斯模块
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn import metrics
    from sklearn.naive_bayes import GaussianNB
    
    # 定义train_and_predict函数,接收三个参数:训练输入特征、训练输出标签和预测输入特征
    def train_and_predict(train_input_features, train_outputs, prediction_features):
        # 创建一个高斯朴素贝叶斯分类器对象
        clf = GaussianNB()
        # 使用训练输入特征和训练输出标签来训练分类器
        clf.fit(train_input_features, train_outputs)
        # 使用预测输入特征来预测输出标签,并将结果返回
        y_pred = clf.predict(prediction_features)
        return y_pred
    
    # 加载鸢尾花数据集,包含150个样本,每个样本有四个特征和一个标签
    iris = datasets.load_iris()
    # 将数据集随机分成训练集和测试集,其中训练集占70%,测试集占30%,并设置随机种子为0
    X_train, X_test, y_train, y_test = train_test_split(
        iris.data, iris.target, test_size=0.3, random_state=0
    )
    
    # 调用train_and_predict函数,使用训练集来训练分类器,并使用测试集来预测标签,将结果赋值给y_pred
    y_pred = train_and_predict(X_train, y_train, X_test)
    
    # 如果y_pred不为空,打印预测标签和真实标签的准确率,即正确预测的比例
    if y_pred is not None:
        print(metrics.accuracy_score(y_test, y_pred))

    3、描述

    机器学习库 sklearn 自带鸢尾花分类数据集,分为四个特征和三个类别,其中这三个类别在数据集中分别表示为 0, 1 和 2,请实现 transform_three2two_cate 函数的功能,该函数是一个无参函数,要求将数据集中 label 为 2 的数据进行移除,也就是说仅保留 label 为 0 和为 1 的情况,并且对 label 为 0 和 1 的特征数据进行保留,返回值为 numpy.ndarray 格式的训练特征数据和 label 数据,分别为命名为 new_feat 和 new_label。

    然后在此基础上,实现 train_and_evaluate 功能,并使用生成的 new_feat 和 new_label 数据集进行二分类训练,限定机器学习分类器只能从逻辑回归和决策树中进行选择,将训练数据和测试数据按照 8:2 的比例进行分割。
    要求输出测试集上的 accuracy_score,同时要求 accuracy_score 要不小于 0.95。

    4、code

    #导入numpy库,它是一个提供了多维数组和矩阵运算等功能的Python库
    import numpy as np
    #导入sklearn库中的datasets模块,它提供了一些内置的数据集
    from sklearn import datasets
    #导入sklearn库中的model_selection模块,它提供了一些用于模型选择和评估的工具,比如划分训练集和测试集
    from sklearn.model_selection import train_test_split
    #导入sklearn库中的preprocessing模块,它提供了一些用于数据预处理的工具,比如归一化
    from sklearn.preprocessing import MinMaxScaler
    #导入sklearn库中的linear_model模块,它提供了一些线性模型,比如逻辑回归
    from sklearn.linear_model import LogisticRegression
    #导入sklearn库中的metrics模块,它提供了一些用于评估模型性能的指标,比如F1分数、ROC曲线面积、准确率等
    from sklearn.metrics import f1_score,roc_auc_score,accuracy_score
    #导入sklearn库中的tree模块,它提供了一些树形模型,比如决策树
    from sklearn.tree import DecisionTreeClassifier
    
    #定义一个函数transform_three2two_cate,它的作用是将鸢尾花数据集中的三分类问题转化为二分类问题
    def transform_three2two_cate():
        #从datasets模块中加载鸢尾花数据集,并赋值给data变量
        data = datasets.load_iris()
        #其中data特征数据的key为data,标签数据的key为target
        #需要取出原来的特征数据和标签数据,移除标签为2的label和特征数据,返回值new_feat为numpy.ndarray格式特征数据,new_label为对应的numpy.ndarray格式label数据
        #需要注意特征和标签的顺序一致性,否则数据集将混乱
        #code start here
        
        #使用numpy库中的where函数找出标签为2的索引,并赋值给index_arr变量
        index_arr = np.where(data.target == 2)[0]
        #使用numpy库中的delete函数删除特征数据中对应索引的行,并赋值给new_feat变量
        new_feat = np.delete(data.data, index_arr, 0)
        #使用numpy库中的delete函数删除标签数据中对应索引的元素,并赋值给new_label变量
        new_label = np.delete(data.target, index_arr)
    
        #code end here
        
        #返回新的特征数据和标签数据
        return new_feat,new_label
    
    #定义一个函数train_and_evaluate,它的作用是用决策树分类器来训练和评估鸢尾花数据集
    def train_and_evaluate():
        #调用transform_three2two_cate函数,得到新的特征数据和标签数据,并赋值给data_X和data_Y变量
        data_X,data_Y = transform_three2two_cate()
        #使用train_test_split函数,将数据集划分为训练集和测试集,其中测试集占20%,并赋值给train_x,test_x,train_y,test_y变量
        train_x,test_x,train_y,test_y = train_test_split(data_X,data_Y,test_size = 0.2)
        #已经划分好训练集和测试集,接下来请实现对数据的训练
        #code start here
        
        #创建一个决策树分类器的实例,并赋值给estimator变量
        estimator = DecisionTreeClassifier()
        #使用fit方法,用训练集的特征和标签来训练决策树分类器
        estimator.fit(train_x, train_y)
        #使用predict方法,用测试集的特征来预测标签,并赋值给y_predict变量
        y_predict = estimator.predict(test_x)
        
    
    
    
        #code end here
        #注意模型预测的label需要定义为 y_predict,格式为list或numpy.ndarray
        #使用accuracy_score函数,计算测试集上的准确率分数,并打印出来
        print(accuracy_score(y_predict,test_y))
    
    #如果这个文件是作为主程序运行,则执行以下代码
    if __name__ == "__main__":
        #调用train_and_evaluate函数
        train_and_evaluate()
        #要求执行train_and_evaluate()后输出为:
        #1、{0,1},代表数据label为0和1
        #2、测试集上的准确率分数,要求>0.95
    0
    一张图看懂数字IC设计前后端全流程(DC ICC PT的关系)
    « 上一篇 2023-07-27
    算法-反转链表C&Python实现
    下一篇 » 2023-07-22

    评论 (0)

    取消