我尝试分类收入< = 50k或> 50k并编写交叉验证函数以获得每个准确度
X = df[['age','workclass','fnlwgt','education','marital_status','occupation','relationship','race','sex']]
y = df['income']
k_fold = 10
def k_fold_generator(X, y, k_fold):
subset_size = len(X) / k_fold
for k in range(k_fold):
X_train = X[:k * subset_size] + X[(k + 1) * subset_size:]
X_test = X[k * subset_size:][:subset_size]
y_train = y[:k * subset_size] + y[(k + 1) * subset_size:]
y_test = y[k * subset_size:][:subset_size]
yield X_train, y_train, X_test, y_test
以上是好的
但在
for X_train, y_train, X_test, y_test in k_fold_generator(X, y, k_fold):
print("Error")
TypeError:无法对切片建立索引 " class' pandas.core.indexes.numeric.Int64Index'"这些索引器[0.0]的 " class' float'"
答案 0 :(得分:1)
subset_size
是一个浮点数。
正是错误消息告诉您的原因,正是切片(预期整数)不起作用的原因。在尝试高级任务之前,我建议您通过快速,基本的Python教程。 :)
据推测,你碰巧遇到了Python 2中的一些示例代码,其中默认的除法行为是整数除法,现在尝试在Python 3.x版本中执行它。您可以尝试强制整数除法的subset_size = len(X) // k_fold
。或者,您每次都可以int(round(k*subset_size))
。我建议前者。
此外,由于您的训练数据X_Train
似乎是正确的pandas.DataFrame
,您可能不得不使用.iloc
来进行显式整数切片。