机器学习特征工程学习笔记(一)

        机器学习特征工程是指在机器学习任务中对原始数据进行转换、提取和选择,以创建更有效、更具有表征能力的特征的过程。良好的特征工程可以显著提升模型的性能,并帮助解决数据中存在的各种问题。
        以下是一些常见的机器学习特征工程技术:
1、特征缩放(Feature Scaling):对于数值型特征,将其进行缩放,使得特征值的范围落在相似的区间内,常见的缩放方法包括标准化(Standardization)和归一化(Normalization)。
2、特征编码(Feature Encoding):将非数值型的特征转换为数值型表示,以便于机器学习算法的处理。常见的编码方法包括独热编码(One-Hot Encoding)、标签编码(Label Encoding)等。
3、特征衍生(Feature Derivation):通过对原始特征进行数学运算或组合,生成新的特征。例如,可以通过将两个特征相除或相乘来创建新的特征,或者提取日期特征中的年份、月份等信息。
4、特征选择(Feature Selection):从原始特征中选择最相关或最具有代表性的特征,以减少特征维度和消除冗余信息。常见的特征选择方法包括相关性分析、方差阈值、正则化方法等。
5、特征转换(Feature Transformation):对原始特征进行变换,使其符合机器学习模型的假设或改善特征的分布。常见的转换方法包括对数变换、指数变换、多项式变换等。
6、特征降维(Feature Dimensionality Reduction):通过保留最重要的特征信息,将高维特征空间降低到低维表示,以减少计算复杂性和消除冗余。常见的降维方法包括主成分分析(PCA)、线性判别分析(LDA)等。
7、时间序列特征提取(Time Series Feature Extraction):从时间序列数据中提取有意义的特征,例如滑动窗口统计特征、傅里叶变换等,以捕捉时间序列数据的趋势和周期性。
这些技术只是特征工程中的一部分,实际应用中可能会根据具体任务和数据的特点选择适合的特征工程方法。


一)特征缩放(Feature Scaling)


当进行特征缩放时,可以使用不同的库和函数进行实现。
下面是使用Python中的scikit-learn库进行特征缩放的示例代码:

from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 创建一个特征矩阵 X,假设有两个数值型特征
X = [[10, 20],
     [30, 40],
     [50, 60]]

# 使用标准化进行特征缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

print("标准化后的特征矩阵:")
print(X_scaled)

# 使用归一化进行特征缩放
minmax_scaler = MinMaxScaler()
X_normalized = minmax_scaler.fit_transform(X)

print("归一化后的特征矩阵:")
print(X_normalized)

在上面的代码中,首先导入了StandardScaler和MinMaxScaler类,分别用于标准化和归一化特征。然后创建一个包含数值型特征的特征矩阵X。接下来,使用StandardScaler对X进行标准化,并将结果保存在X_scaled中,然后使用MinMaxScaler对X进行归一化,并将结果保存在X_normalized中。
最后,打印输出标准化和归一化后的特征矩阵。标准化后的特征矩阵会使得每个特征的均值为0,标准差为1;归一化后的特征矩阵将特征值缩放到[0, 1]的范围内。
请注意,在实际应用中,需要根据数据的特点和算法的需求选择合适的特征缩放方法。此外,特征缩放通常在训练集上进行拟合(fit)操作,然后再在训练集和测试集上进行转换(transform)操作,以避免信息泄漏。

二)特征编码(Feature Encoding)


当需要进行特征编码时,可以使用不同的库和函数进行实现。下面是使用Python中的scikit-learn库和pandas库进行特征编码的示例代码:
1)独热编码(One-Hot Encoding)

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# 创建一个包含非数值型特征的DataFrame
data = pd.DataFrame({'color': ['红', '绿', '蓝', '红', '蓝']})

# 使用独热编码进行特征编码
encoder = OneHotEncoder(sparse=False)
encoded_data = encoder.fit_transform(data)

print("独热编码后的特征矩阵:")
print(encoded_data)

在上面的代码中,首先导入了pandas库用于创建DataFrame,并导入OneHotEncoder类用于进行独热编码。然后创建了一个包含非数值型特征color的DataFrame。接下来,使用OneHotEncoder进行独热编码,并将结果保存在encoded_data中。
最后,打印输出独热编码后的特征矩阵。独热编码将每个非数值型特征转换为多个二进制特征,其中每个特征表示一个可能的取值。
2)标签编码(Label Encoding)

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 创建一个包含非数值型特征的Series
data = pd.Series(['红', '绿', '蓝', '红', '蓝'])

# 使用标签编码进行特征编码
encoder = LabelEncoder()
encoded_data = encoder.fit_transform(data)

print("标签编码后的特征:")
print(encoded_data)

在上面的代码中,导入了pandas库用于创建Series,并导入LabelEncoder类用于进行标签编码。然后创建了一个包含非数值型特征的Series。接下来,使用LabelEncoder进行标签编码,并将结果保存在encoded_data中。
最后,打印输出标签编码后的特征。标签编码将每个非数值型特征的取值映射为一个整数。
需要注意的是,在使用标签编码或独热编码之前,通常需要先对数据进行适当的预处理,如处理缺失值、处理异常值等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值