循环通过不同的样本大小



如何循环使用不同的样本大小,为每个样本创建一个数据帧,以便能够在模型中使用
我尝试使用以下代码,但似乎没有得到正确的结果。有没有一种替代方法,我可以在不同样本大小的therms中使用,这样它们就可以通过一个模型。

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

以后你可以用作

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,但在循环内部

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 ...

最新更新