machine-learning - 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)的长度不同
我使用随机森林作为分类器。特征是否需要相同的长度,如果需要,我该怎么办?
我用平均值填充缺失的数字吗?那么多零?如果我这样做了,它似乎会在所有零所在的整个列中填充相同的平均数字
解决方案
特征需要具有相同的长度,即数据集中不应有缺失值。一些模型在内部处理缺失值,但最好处理这些缺失值。
您有多种选择。让我们一一列出。
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
. 也许模型从这些值缺失的事实中找出了一些意义。
推荐阅读
- botframework - 无法在数据库 msbotframework nodejs 中存储上下文对象
- shopify - 如果商品不在购物车中,则显示添加到购物车 btn Shopify
- python-3.x - 除了文本如何从文本中删除数字、标点、空格和特殊字符?
- scala - 在 Spark 中创建用户定义的函数来处理嵌套结构列
- angular - 单元测试时“无法读取未定义的属性‘长度’”
- javascript - UseEffect 挂钩:无法对未安装的组件执行 React 状态更新
- google-sheets - 如何在谷歌表格中获得更多位数的多项式趋势线
- altbeacon - iBeacon 传输似乎不稳定,Altbeacon android Kotlin
- amazon-web-services - 是否有任何 AWS CLI 命令来获取特定资源的支持区域列表
- angular - NPM Azure 管道 - 缺少脚本