首页 > 解决方案 > Sci-kit 学习中的特征是否必须是相同的长度

问题描述

我有几个从 PCAP 文件中获取的功能,这些是网络流功能

但是我遇到的问题是特征的长度不同

我的意思是例如这里是我的数据框的示例

TotBytes Dur            Afr                     DNS_Interval NTP_interval

250 0.030967    8073.110084929118   300.0        301.0
262 0.113429    2309.8149503213463  1.0      300.0
1960    0.062134    31544.725914957988  300.0        52.0
379 0.020444    18538.446487967132  10.0         300.0
1389    0.154713        8977.913943883192   40.0         1.0

数据框结束

TotBytes    Dur Afr               DNS_interval   NTP_interval 
262 0.099459    2634.25129953046    0.0      0.0
250 0.029093    8593.132368611006   0.0          0.0
250 0.024784    10087.153001936733  0.0      0.0
250 0.035297    7082.75490834915    0.0      0.0
262 0.112134        2336.46943              0.0          0.0
250 0.024445    10227.04029453876   0.0      0.0

如您所见,特征 DNS_interval 和 NTP_interval 与其他 3 个特征(TotBytes、Dur 和 Afr)的长度不同

我使用随机森林作为分类器。特征是否需要相同的长度,如果需要,我该怎么办?

我用平均值填充缺失的数字吗?那么多零?如果我这样做了,它似乎会在所有零所在的整个列中填充相同的平均数字

标签: machine-learningscikit-learn

解决方案


特征需要具有相同的长度,即数据集中不应有缺失值。一些模型在内部处理缺失值,但最好处理这些缺失值。

您有多种选择。让我们一一列出。

1.如果一列中缺失值的数量与DataFrame的大小相比非常少,您可以删除包含缺失值的整行。

df.dropna(axis=0, inplace=True)

这会删除具有任何缺失值的每一行。确保在删除前后检查大小,以确保没有实质性的数据丢失。

2.如果DataFrame的一列中的值很少,您可以删除整个特征/列。

df.drop(feature_list_to_drop, axis=1, inplace=True)

3.缺失值的数量与存在的值相当时

有多种技术可以填补缺失值,每种技术都擅长于自己的位置。您只需要找出哪个更适合您的数据集。

一个。用平均值填充

df.feature.fillna(df.feature.mean(), inplace=True)

湾。填充模式(如果一个值占主导地位或分类)

df.feature.fillna(df.feature.mode()[0], inplace=True)

C。建立一个模型来预测缺失的列值(难以实现和时间开销,但最好的方法

4.当没有任何结果时,只需用一些负值填充缺失值,如-99. 也许模型从这些值缺失的事实中找出了一些意义。


推荐阅读