这很奇怪,因为这个错误只在特定的三列中出现,而在其他列中运行正常。
错误信息如下:
Traceback (most recent call last): File "/version1/analyze.py", line 447, in <module> cv_results = model_selection.cross_val_score(model, X_train, Y_train,cv=kfold, scoring=scoring) File "/usr/lib64/python2.7/site-packages/sklearn/model_selection/_validation.py", line 140, in cross_val_score for train, test in cv_iter)fac = 1. / (n_samples - n_classes)ZeroDivisionError: float division by zero
我的代码如下:
validation_size = 0.20seed = 10X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)seed = 10scoring = 'accuracy'kfold = model_selection.KFold(n_splits=10, random_state=seed)cv_results = model_selection.cross_val_score(model, X_train, Y_train,cv=kfold, scoring=scoring) #错误在这里发生
上述错误只在我选择数据集中特定的一些列时发生,对于其他列都能正常工作!
所有列的数据量和值类型都是相同的。
#用于拆分验证数据集的代码 array = dataset.values if field == "rh": X = array[:,0:8] elif field == "rm": X = array[:,0:8] elif field == "wh": X = array[:,0:8] elif field == "wm": X = array[:,0:8] else : print"wrong field" if field == "rh": Y = array[:,0] #运行正常,即使对于4,5,6,7也正常 elif field == "rm": #只在1,2,3时出现上述错误 Y = array[:,1] #出现上述错误 elif field == "wh": #出现上述错误 Y = array[:,2] elif field == "wm": #出现上述错误 Y = array[:,3] else : print"wrong field"
这是我的数据集:
index,1column,2 column,3column,….,8column 0,238,240,1103,409,1038,4,67,0 1,41,359,995,467,1317,8,71,0 2,102,616,1168,480,1206,7,59,0 3,0,34,994,181,1115,4,68,0 4,88,1419,1175,413,1060,8,71,0 5,826,10886,1316,6885,2086,263,119,0 6,88,472,1200,652,1047,7,64,0 7,0,322,957,533,1062,11,73,0 8,0,200,1170,421,1038,5,63,0 9,103,1439,1085,1638,1151,29,66,0 10,0,1422,1074,4832,1084,27,74,0 11,1828,754,11030,263845,1209,10,79,0 12,340,1644,11181,175099,4127,13,136,0 13,71,1018,1029,2480,1276,18,66,1 14,0,3077,1116,1696,1129,6,62,0 “””””” ‘”””””
总共有105条数据记录
但是上述错误不会在选择第1列时发生,即当Y = 第1列时,但当我选择其他列2、3或4时,会发生同样的错误。
回答:
n_samples是数据集中的行数,n_classes是标签数组中唯一的类别标签。上述错误发生是因为数据集中没有标签类别!