【问题标题】:Sample data using np.random.choice()使用 np.random.choice() 的样本数据
【发布时间】:2021-10-12 14:25:24
【问题描述】:

我正在使用来自 sklearn 的 iris 数据集进行一些基本的预测建模。我将数据分成训练集和测试集,对于给定比例的列表,我想在不替换不同比例的训练数据的情况下进行抽样。我需要使用 np.random.choice 无法使用 df.sample

进行采样

但我正在做的采样似乎不正确。我将非常感谢任何见解。

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
props=[0.2,0.5,0.7,0.9]
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                    columns= iris['feature_names'] + ['target'])
y=df[list(df.loc[:,df.columns.values =='target'])]
X=df[list(df.loc[:,df.columns.values !='target'])]
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3
                                       ,train_size=0.7)
for i in proportions:
   sampleX=np.random.choice(X_train, size=i, replace = False) #----> code to sample

【问题讨论】:

    标签: python pandas numpy scikit-learn


    【解决方案1】:

    您可以对索引进行采样:

    props=[0.2,0.5,0.7,0.9]
    for i in props:
        ix = np.random.choice(X_train.index, size=int(i*len(X_train)), replace = False)
        sampleX = X_train.loc[ix]
    

    或者简单地使用二项式:

    for i in props:
        sampleX = X_train.iloc[np.random.binomial(1,i,len(X))]
    

    【讨论】:

    • 虽然这个采样完美,但它是带替换采样。
    • 令人惊讶的因为替换设置为 False。我试图在 test_train_split() 中设置 random_state 但这也没有用
    • 你的意思是替换样本是什么意思,你意识到你正在用每次迭代权覆盖sampleX
    • 如果你使用 np.random.choice 或 np.random.binomial,每一行都会被使用一次。不可能有重复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多