python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解

文章目录

  • train_test_split()用法
  • 获取数据
  • 划分训练集和测试集
  • 完整代码脚手架
  • train_test_split()用法

    python机器学习中常用 train_test_split()函数划分训练集和测试集,其用法语法如下:

  • X_train, X_test, y_train, y_test = train_test_split(train_data, train_target, test_size, random_state, shuffle)
  • 变量 描述
    X_train 划分的训练集数据
    X_test 划分的测试集数据
    y_train 划分的训练集标签
    y_test 划分的测试集标签
    参数 描述
    train_data 还未划分的数据集
    train_target 还未划分的标签
    test_size 分割比例,默认为0.25,即测试集占完整数据集的比例
    random_state 随机数种子,应用于分割前对数据的洗牌。可以是int,RandomState实例或None,默认值=None。设成定值意味着,对于同一个数据集,只有第一次运行是随机的,随后多次分割只要rondom_state相同,则划分结果也相同。
    shuffle 是否在分割前对完整数据进行洗牌(打乱),默认为True,打乱

    以sklearn库内置的iris数据集(鸢尾数据集)为例,首先获取数据:

    获取数据

    from sklearn.model_selection import train_test_split
    # 以sklearn库内置的iris数据集(鸢尾数据集)为例
    dataset = load_iris()
    

    这里的dataset数据是sklearn.utils.Bunch类型的数据,比较像字典

    将其打印出~

    print(dataset)
    

    如下所示

    从中取出其data属性和target属性,X是特征数组(也称数据集),y表示类别数组(也称标签)

    X = dataset.data
    y = dataset.target
    

    此例中,有四个特征(即data的4列表示4个特征),分别是鸢尾植物的萼片的长,萼片的宽,花瓣的长,花瓣的宽。
    X中共150行,即150个样本,类别数据总共有150个数据(对应150个样本的类别)。

    print(y)
    

    y的150个数据如上图,其中,有0,1,2三个取值,表示三种花:

    0 1 2
    Iris Setosa(山鸢尾) Iris Versicolour(变色鸢尾) Iris Virginica(维吉尼亚鸢尾)

    使用最简单的离散化算法,以均值为阈值,使大于阈值的特征值为1,小于阈值的特征值为0.

    attribute_means = X.mean(axis=0) 
    X_d = np.array(X >= attribute_means, dtype='int')  # bool转换
    print(X_d) 
    

    运行结果(成功将X的数据转换为bool类型):

    划分训练集和测试集

    然后就是使用train_test_split()函数将数据划分训练集和测试集了。

    random_state = 10
    # 以默认的0.25作为分割比例进行分割(训练集:测试集=3:1)
    X_train, X_test, y_train, y_test = train_test_split(X_d, y, random_state=random_state)
    print("There are {} training samples".format(y_train.shape[0]))
    print("There are {} testing samples".format(y_test.shape[0]))
    


    如图得到的数据中112/38接近3:1。分割成功!


    完整代码脚手架

    (将上述分步的代码写在一块儿方便复制使用):

    from sklearn.model_selection import train_test_split
    dataset = load_iris()
    
    X = dataset.data
    y = dataset.target
    
    attribute_means = X.mean(axis=0) 
    X_d = np.array(X >= attribute_means, dtype='int')
    
    random_state = 10
    X_train, X_test, y_train, y_test = train_test_split(X_d, y, random_state=random_state)
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解

    发表回复