我有两个关于 dask 的问题。首先:dask 的文档明确指出您可以使用与 Pandas 相同的语法重命名列。我正在使用 dask 1.0.0。我在下面收到这些错误的任何原因?
df = pd.DataFrame(dictionary)
df
Run Code Online (Sandbox Code Playgroud)
# I am not sure how to choose values for divisions, meta, and name. I am also pretty unsure about what these really do.
ddf = dd.DataFrame(dictionary, divisions=[8], meta=pd.DataFrame(dictionary), name='ddf')
ddf
Run Code Online (Sandbox Code Playgroud)
cols = {'Key':'key', '0':'Datetime','1':'col1','2':'col2','3':'col3','4':'col4','5':'col5'}
ddf.rename(columns=cols, inplace=True)
TypeError: rename() got an unexpected keyword argument 'inplace'
Run Code Online (Sandbox Code Playgroud)
好的,所以我删除了inplace=True并尝试了这个:
ddf = ddf.rename(columns=cols)
ValueError: dictionary update sequence element #0 has length 6; 2 is required
Run Code Online (Sandbox Code Playgroud)
pandas 数据框显示了一个真实的数据框,但是当我打电话时,ddf.compute()我得到了一个空的数据框。
My …
考虑 3 个数据集训练/验证/测试。sklearnGridSearchCV()默认情况下选择具有最高交叉验证分数的最佳模型。在预测需要准确的现实环境中,这是选择最佳模型的可怕方法。原因是它应该如何使用:
模型的训练集以学习数据集
Val 设置用于验证模型在训练集中学到的内容并更新参数/超参数以最大化验证分数。
测试集 - 在未见过的数据上测试您的数据。
最后,在实时环境中使用模型并记录结果,看看结果是否足以做出决策。令人惊讶的是,许多数据科学家仅仅选择验证分数最高的模型,就冲动地在生产中使用他们训练过的模型。我发现gridsearch选择的模型严重过度拟合,并且在预测看不见的数据方面比默认参数做得更差。
我的做法:
手动训练模型并查看每个模型的结果(以某种循环方式,但效率不高)。这是非常手动且耗时的,但我得到的结果比gridsearch好得多。我希望这是完全自动化的。
为我想要选择的每个超参数绘制验证曲线,然后选择显示训练集和验证集之间差异最小的超参数,同时最大化两者(即训练= 98%,验证= 78%确实很糟糕,但训练= 72% ,val=70% 是可以接受的)。
正如我所说,我想要一种更好的(自动化)方法来选择最佳模型。
我正在寻找什么样的答案:
我想最大化训练集和验证集中的分数,同时最小化训练集和验证集之间的分数差异。考虑以下网格搜索算法的示例:有两种模型:
Model A: train score = 99%, val score = 89%
Model B: train score = 80%, val score = 79%
Run Code Online (Sandbox Code Playgroud)
B 型是一个更可靠的模型,我随时都会选择 B 型而不是 A 型。它不太适合,并且预测是一致的。我们知道会发生什么。然而,gridsearch将选择模型 A,因为 val 分数更高。我发现这是一个常见问题,并且在互联网上没有找到任何解决方案。人们往往过于关注在学校学到的东西,而没有真正考虑选择过度拟合模型的后果。我看到了关于如何使用sklearn和caret包中的gridsearch并让他们为您选择模型的冗余帖子,但没有看到如何实际选择最佳模型。
到目前为止,我的方法非常手动。我想要一种自动化的方式来做到这一点。
我目前所做的是这样的:
gs = GridSearchCV(model, params, cv=3).fit(X_train, y_train) # X_train and y_train consists …Run Code Online (Sandbox Code Playgroud) 我有一个我无法容纳在内存中的镶木地板文件文件夹,因此我正在dask用来执行数据清理操作。我有一个要执行项目分配的功能,但似乎找不到任何在线解决方案可作为该特定功能的解决方案。以下是在熊猫中起作用的功能。如何在dask数据框中获得相同的结果?我以为延迟可能会有所帮助,但是我尝试编写的所有解决方案都没有起作用。
def item_assignment(df):
new_col = np.bitwise_and(df['OtherCol'], 0b110)
df['NewCol'] = 0
df.loc[new_col == 0b010, 'NewCol'] = 1
df.loc[new_col == 0b100, 'NewCol'] = -1
return df
Run Code Online (Sandbox Code Playgroud)
TypeError: '_LocIndexer' object does not support item assignment
假设我有一个熊猫数据框:
Id Book
1 Harry Potter (1997)
2 Of Mice and Men (1937)
3 Babe Ruth Story, The (1948) Drama 948) Babe Ruth Story
Run Code Online (Sandbox Code Playgroud)
如何从列中提取年份?
输出应该是:
Id Book Title Year
1 Harry Potter 1997
2 Of Mice and Men 1937
3 Babe Ruth Story, The 1948
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过:
movies['year'] = movies['title'].str.extract('([0-9(0-9)]+)', expand=False).str.strip()
Run Code Online (Sandbox Code Playgroud)
和
books['year'] = books['title'].str[-5:-1]
Run Code Online (Sandbox Code Playgroud)
我搞砸了一些其他的事情,还没有让它发挥作用。有什么建议?
python ×4
pandas ×3
dask ×2
datetime ×1
gridsearchcv ×1
parsing ×1
r ×1
r-caret ×1
regex ×1
scikit-learn ×1