我正在从NSL-KDD数据集中选择特征。预处理后,我的X-DoS的数据类型如下:
type_of_target(X_newDoS)
'continuous-multioutput'
和Y_DoS为
type_of_target(Y_DoS)
'unkonwn'
我将特征选择部分运行为:
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier
clf =RandomForestClassifier( n_jobs = 2)
rfe = RFE(clf, n_features_to_select=1)
rfe.fit(X_newDoS, Y_DoS)
错误消息:
ValueError Traceback (most recent call
last)
<ipython-input-31-6c22f9cc2bba> in <module>()
12 rfe = RFE(clf, n_features_to_select=1)
---> 13 rfe.fit(X_newDoS, Y_DoS)
14
4 frames
/usr/local/lib/python3.6/dist-packages/sklearn/utils/multiclass.py in
check_classification_targets(y)
167 if y_type not in ['binary', 'multiclass', 'multiclass-
multioutput',
168 'multilabel-indicator', 'multilabel-
sequences']:
--> 169 raise ValueError("Unknown label type: %r" % y_type)
170
ValueError: Unknown label type: 'unknown'
X_newDoS是一个numpy数组,Y_DoS是一个维数组(125972,2)。单击multiclass.py文件,我发现列表中没有“未知”类型。我尝试使用以下方法将Y_DoS数组转换为numpy数组:
Y_DoS = np.array(Y_DoS)
仍然是未知数据类型,并且multiclass.py文件无法识别。我可以通过什么方式解决此问题?如何使Y_DoS变量成为multiclass.py文件可识别的另一种类型,而又不丢失其内容和结构? 作为参考,我使用了此链接中的代码,并完成了相同的预处理步骤。 https://github.com/CynthiaKoopman/Network-Intrusion-Detection/blob/master/DecisionTree_IDS.ipynb
我对机器学习非常陌生。该程序与numpy 1.11.3,sklearn 0.18.1和pandas 1.19.2配合良好。当使用当前的预装库版本的colab(numpy 0.24.2,sklearn 1.16.3,pandas 0.21.1)时,会引发上述错误。
答案 0 :(得分:0)
似乎Y_DoS变量恰好是未定义的对象,因此sklearn无法识别其类型。添加
Y_DoS = Y_DoS.astype('int')
在学习步骤解决问题之前,将Y_DoS归类为“二进制”类型。