什么是特征工程
特征是⽤于描述数据中的各种属性、变量或维度的信息,它们是模型⽤来做 出预测或分类的输⼊。特征⼯程是使⽤专业背景知识和技巧处理数据,使得特征能 在机器学习算法上发挥更好的作⽤的过程。良好的特征⼯程可以显著提⾼模型的性能,⽽糟糕的特征选择或构建可能导致模型性能下降。
意义:会直接影响机器学习的效果
特征⼯程的主要⽬标包括:
1. 特征选择:选择最相关的特征,以减少维度和噪声,提⾼模型的泛化能⼒。这 可以通过统计⽅法、领域知识、特征重要性评估等⽅式来完成。
2. 特征构建:创建新的特征,以提供更多的信息或改善模型的性能。这可能包括 将原始特征组合、进⾏数学变换、提取时间序列特征等操作。
3. 特征缩放:确保特征具有相似的尺度,以避免某些特征对模型的权重产⽣不适 当的影响。常⻅的缩放⽅法包括标准化和归⼀化。
4. 处理缺失数据:处理缺失值,可以使⽤插补⽅法来填充缺失值,或者考虑是否 删除包含缺失值的样本。
5. 处理分类特征:将分类特征进⾏编码,例如独热编码(One-Hot Encoding) 或标签编码(Label Encoding),以使其适⽤于机器学习模型。
6. 特征交叉:将不同特征之间的关联性考虑在内,通过创建特征交叉来提供更多 信息。
7. 特征选择和降维:使⽤降维技术(如主成分分析PCA)来减少特征的数量,以 提⾼模型的效率和可解释性。
基本预处理
- 基本预处理:缺失值处理
- 删除属性或者删除样本:如果⼤部分样本该属性都缺失,这个属性能提供的信息有限,可以选择放弃使⽤该维属性
- 统计填充:对于缺失值的属性,尤其是数值类型的属性,根据所有样本关于这维属性的统计值对其进⾏填充,如使⽤平均数、中位数、众数、 最⼤值、最⼩值等,具体选择哪种统计值需要具体问题具体分析。
- 统⼀填充:常⽤的统⼀填充值有:“空”、“0”、“正⽆穷”、“负⽆ 穷”等。
- 预测/模型填充:可以通过预测模型利⽤不存在缺失值的属性来预测缺失值,也就是先⽤预测模型把数据填充后再做进⼀步的⼯作,如统计、 学习等。虽然这种⽅法⽐较复杂,但是最后得到的结果⽐较好。 pandas库: fillna sklearn库: Imputer
- pandas库:fillna
- sklearn库:Imputer
⽤特征⼯程处理泰坦尼克号的预数据
字段说明:
字段1 | 说明1 | 字段2 | 说明2 |
Passenge rId | 乘客ID | Survived | ⽣存情况,1为存活,0为死 亡 |
Pclass | 客舱等级,1为⾼级,2 为中级,3为低级 | Name | 乘客名字 |
Sex | 乘客性别 | Age | 乘客年龄 |
SibSp | 在船兄弟姐妹数/配偶数 | Parch | 在船⽗⺟数/⼦⼥数 |
Ticket | 船票编号 | Fare | 船票价格 |
Cabin | 客舱号 | Embarked | 登船港⼝ |
首先导入模块
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore') # 忽略警告,不写也不影响代码运行
导入数据,显示前5行:
df_train = pd.read_csv('train.csv')
print(df_train.head()) # 打印前5行
运行结果
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S[5 rows x 12 columns]
显示行列数
print(df_train.shape)
运行结果:891行,12列
(891, 12)
看一下它大致有哪些字段,字段的类型
print(df_train.info())
运行结果
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1