计算机视觉--刷题笔记-鸢尾花分类的学习

本文介绍如何使用sklearn库中的鸢尾花数据集,通过transform_three2two_cate函数筛选出label为0和1的样本,进行逻辑回归和决策树的二分类训练。train_and_evaluate函数实现了数据预处理、模型训练及测试,目标是确保测试集上的accuracy_score大于0.95。
摘要由CSDN通过智能技术生成

描述
机器学习库 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。

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score,roc_auc_score,accuracy_score
from sklearn.tree import DecisionTreeClassifier

def transform_three2two_cate():
    data = datasets.load_iris()
    #其中data特征数据的key为data,标签数据的key为target
    #需要取出原来的特征数据和标签数据,移除标签为2的label和特征数据,返回值new_feat为numpy.ndarray格式特征数据,new_label为对应的numpy.ndarray格式label数据
    #需要注意特征和标签的顺序一致性,否则数据集将混乱
    #code start here
    index2=np.where(np.array(data.target)==2)
    new_feat = np.delete(data.data, index2, axis = 0)
    new_label = np.delete(data.target, index2)

    #code end here
    return new_feat,new_label

def train_and_evaluate():
    data_X,data_Y = transform_three2two_cate()
    train_x,test_x,train_y,test_y = train_test_split(data_X,data_Y,test_size = 0.2)
    #已经划分好训练集和测试集,接下来请实现对数据的训练
    #code start here
    dtc =DecisionTreeClassifier(max_depth=3)                         # 建立决策树模型
    dtc.fit(train_x,train_y)                                         # 训练模型
    y_predict = dtc.predict(test_x)    
    #输出{01}
    

#     data_X,tar_Y = transform_three2two_cate()

#     s=[]
#     for i in tar_Y:
#         if i not in s:
#             s.append(i)

#     for j in range(len(s)):
#         if j>0:
#             a=a+','+str(j)
#         else:
#             a=str(j)
#     print('{{{}}}'.format(a))
    #code end here
    #注意模型预测的label需要定义为 y_predict,格式为list或numpy.ndarray
    print(accuracy_score(y_predict,test_y))

if __name__ == "__main__":
    train_and_evaluate()
    #要求执行train_and_evaluate()后输出为:
    #1{0,1},代表数据label为01
    #2、测试集上的准确率分数,要求>0.95

1.import

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score,roc_auc_score,accuracy_score
from sklearn.tree import DecisionTreeClassifier

首先查看一下数据格式
在这里插入图片描述
在这里插入图片描述
np.where有两种用法
1.np.where(condition,x,y) 当where内有三个参数时,第一个参数表示条件,当条件成立时where方法返回x,当条件不成立时where返回y
2.np.where(condition) 当where内只有一个参数时,那个参数表示条件,当条件成立时,where返回的是每个符合condition条件元素的坐标,返回的是以元组的形式
————————————————
np.delete(array,obj,axis)
二、函数的意思
array:需要处理的矩阵
obj:需要处理的位置,比如要删除的第一行或者第一行和第二行
axis:
如果输入为None:array会先按行展开,然后按照obj,删除第obj-1(从0开始)位置的数,返回一个行矩阵。
如果输入为0:按行删除
如果输入为1:按列删除
————————————————

DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False,
random_state=None, splitter=‘best’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值