美文网首页
python 机器学习之随机抽样-分层抽样

python 机器学习之随机抽样-分层抽样

作者: 阿酒88 | 来源:发表于2021-01-07 10:03 被阅读0次

    在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”。python有现成的模块,完整代码如下:

    import pandas as pd

    import numpy as np

    import matplotlib.pyplot as plt

    import seaborn as sns

    from sklearn.model_selection import train_test_split

    # 随机抽样

    def read_data(data_file,label,start,test_size,random_state):

     #label  分类变量所在列号,如第二列是2;start,分类用的指标开始列号;random_state,随机种子

        dataset = pd.read_csv(data_file) 

        train_data= dataset.iloc[:,(start-1):].values

        train_target = dataset.iloc[:,(label-1):label]

        train_x,test_x,train_y,test_y = train_test_split(train_data,train_target,test_size=test_size,random_state=random_state)

        return train_x, train_y, test_x, test_y,dataset

    if __name__ == '__main__': 

        data_file = "/data/for_python.csv"

        out_dir="/data/models_pipline"

        test_size = 0.3 #测试集合占30%

        random_state=5 #随机种子 为5     

        print('reading training and testing data...') 

        train_x, train_y, test_x, test_y,dataset = read_data(data_file,2,3,test_size,random_state) 

        print(' training and testing data done !') 

    ##############

    测试的数据有8个分类,每个分类数据量不均等,总样本数600+,抽取后各个分类用于测试的样本占比。

    缺点:多分类随机抽取会有一定的偏差,不是每一个类别都是占该类别的30%,当样本量较少时这种抽取比例的偏差就会产生较大的影响。

    解决方法:分层抽取,分层抽取的代码:

    train_x,test_x,train_y,test_y = train_test_split(train_data,train_target,test_size=test_size,random_state=random_state,stratify=train_target)

    ##  其实就是增加了一个参数,stratify ,在发现这个参数前,自己参考网上的资料也写了一个函数,写完发现还能这样,伤心。。。。

    相关文章

      网友评论

          本文标题:python 机器学习之随机抽样-分层抽样

          本文链接:https://www.haomeiwen.com/subject/txnaoktx.html