遍历不同的样本量

Looping through different sample sizes

我如何循环遍历不同的样本大小,以便为每个样本创建一个数据框,以便我能够在模型中使用。
我尝试使用以下代码,但似乎没有产生正确的结果。有没有其他方法我可以在不同样本量的热量中使用,以便它们可以通过模型。

def HiggsData_loader():
    higgs_arr = []
    X_dir2 = {}
    y_dir2 = {}
    sizes = [10000, 50000, 500000, 1000000]
    for s in  sizes:
        datasets =  pd.read_csv('./DATA/HIGGS.csv',header=None,nrows=s)
        y2 = datasets.values[:,0]
        X2 = datasets.values[:,1:]
    
        scaler = preprocessing.StandardScaler().fit(X2) #A scaler object
        X_scaled2 = scaler.transform(X2)

        higgs_arr.append('Higgs')
        X_dir2['Higgs'] = X_scaled2.copy()
        y_dir2['Higgs'] = y2.copy()
    
    return higgs_arr, X_dir2, y_dir2

我原本希望通过下面代码中的不同样本来测量时间。

md2 = {}
def processing_time(data,methods):
    for m in models:
        rd = {}
        for ds in Data_arr:
            X = X_dir[ds]
            y = y_dir[ds]
            kNN =  KNeighborsClassifier(n_neighbors=50, algorithm = m)
            t_start = time.time()
            scores = cross_val_score(kNN, X, y, cv=2)
            t = time.time()-t_start
            rd[ds] = t
            print('\n',m + " Time: ",'\n', t)
        md2[m] = rd
    return md2

标准规则:如果你使用for循环,那么你需要列表来保留所有结果。

你应该

  • 在循环之前为所有结果创建列表,即 all_results = []
  • 内部循环创建新的 higgs_arrX_dir2y_dir2,添加数据并将所有内容附加到列表,即 all_results.append( [higgs_arr, X_dir2, y_dir2] )
  • 最后使用return all_results

通过这种方式,您可以获得包含许多结果的列表。

我不知道您如何在 processing_time 中使用 HiggsData_loader(),所以我不知道它可能需要进行哪些更改 - 所以我只显示 HiggsData_loader()

它可能看起来像这样。

def HiggsData_loader():

    all_results = []

    sizes = [10000, 50000, 500000, 1000000]

    for s in  sizes:
        datasets =  pd.read_csv('./DATA/HIGGS.csv',header=None,nrows=s)
        y2 = datasets.values[:,0]
        X2 = datasets.values[:,1:]
    
        scaler = preprocessing.StandardScaler().fit(X2) #A scaler object
        X_scaled2 = scaler.transform(X2)

        higgs_arr = []
        X_dir2 = {}
        y_dir2 = {}

        higgs_arr.append('Higgs')
        X_dir2['Higgs'] = X_scaled2.copy()
        y_dir2['Higgs'] = y2.copy()
            
        all_results.append( [higgs_arr, X_dir2, y_dir2] )
    
    return all_results

稍后您可以使用 as

all_results = HiggsData_loader()

for higgs_arr, X_dir2, y_dir2 in all_results:
    # ... code ...

或直接

for higgs_arr, X_dir2, y_dir2 in HiggsData_loader():
    # ... code ...

编辑:

如果您在某些 for 循环中直接使用 HiggsData_loader(),那么您可以使用原始版本,但使用 yield 而不是 return,但在循环 [=31= 内]

def HiggsData_loader():
    sizes = [10000, 50000, 500000, 1000000]
    for s in  sizes:
        datasets =  pd.read_csv('./DATA/HIGGS.csv',header=None,nrows=s)
        y2 = datasets.values[:,0]
        X2 = datasets.values[:,1:]
    
        scaler = preprocessing.StandardScaler().fit(X2) #A scaler object
        X_scaled2 = scaler.transform(X2)

        higgs_arr = []
        X_dir2 = {}
        y_dir2 = {}

        higgs_arr.append('Higgs')
        X_dir2['Higgs'] = X_scaled2.copy()
        y_dir2['Higgs'] = y2.copy()
    
        yield higgs_arr, X_dir2, y_dir2  # inside loop

然后你可以运行作为

for higgs_arr, X_dir2, y_dir2 in HiggsData_loader():
    # ... code ...

或者您可能需要 list() 来获取所有值

all_results = list( HiggsData_loader() )

for higgs_arr, X_dir2, y_dir2 in all_results:
    # ... code ...