【发布时间】:2020-04-16 11:58:56
【问题描述】:
我正在研究基于网络数据的机器学习问题,其中我的数据集中的一列是Destination Port,其中的值类似于30, 80, 1024, etc.。
由于此列中的数值不是序数,我如何以某种方式转换此列,以便将其作为机器学习模型的输入?该列有大约 480 个独特的端口。
【问题讨论】:
标签: machine-learning data-processing
我正在研究基于网络数据的机器学习问题,其中我的数据集中的一列是Destination Port,其中的值类似于30, 80, 1024, etc.。
由于此列中的数值不是序数,我如何以某种方式转换此列,以便将其作为机器学习模型的输入?该列有大约 480 个独特的端口。
【问题讨论】:
标签: machine-learning data-processing
由于Destination Port 是一个标称特征,因此可以使用label encoding 或one hot encoding 对其进行编码。
标签编码
优点:不增加维度
缺点:会对模型产生有序的影响
一种热编码
优点:对模型没有顺序影响
缺点:维度增加
【讨论】:
这称为规范化,规范化的目标是更改数据集中数值列的值以使用通用比例,而不会扭曲值范围的差异或丢失信息。
# Create x, where x the 'scores' column's values as floats
x = df[['name_of_ur_column']].values.astype(float)
# Create a minimum and maximum processor object
min_max_scaler = preprocessing.MinMaxScaler()
# Create an object to transform the data to fit minmax processor
x_scaled = min_max_scaler.fit_transform(x)
或者你可以使用原始格式
# Run the normalizer on the dataframe
df_normalized = pd.DataFrame(x_scaled)
normalized_df=(df-df.mean())/df.std()
使用最小-最大标准化:
normalized_df=(df-df.min())/(df.max()-df.min())
【讨论】: