美文网首页
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