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