1、缺失数据的处理
知识点1:通过dropna方法将存在缺失值的特征或者样本删除
#remove rows that contain missing values
df.dropna(axis=0)
#remove columns that contain missing values
df.dropna(axis=1)
#only drop rows where all columns are NaN
df.dropna(how='all')
#drop rows that have less than 3 real values
df.dropna(thresh=4)
#only drop rows where NaN appear in specific columns (here: 'C')
df.dropna(subset=['C'])
删除过多的样本可能会面临丢失有价值信息的风险
知识点2:通过scikit-learn中的Impute方法缺失数据补充
imr = Imputer(missing_values='NaN', strategy='mean', axis=0)
axis=0/1 去列/行
strategy=mean/most_frequent 均值/出现频次最多
2.处理类别数据
之前学习的为处理数值型数据的方法,然而在真实数据集中,往往出现一个或多个多类别特征列。
- 标称特征(nominal feature) 如颜色
- 有序特征(ordinal feature) 如尺码
import pandas as pd
df = pd.DataFrame([['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']])
df.columns = ['color', 'size', 'price', 'classlabel']
>>> color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
知识点3:pandas.map()函数对类标编码
知识点4:使用scikit-learn中的LabelEncoder类对类标整数编码
from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
y = class_le.fit_transform(df['classlabel'].values)
#reverse mapping
class_le.inverse_transform(y)
3.将数据集划分为训练数据集和测试数据集
from sklearn.model_selection import train_test_split
X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.3,
random_state=0,
stratify=y)
4.将特征缩放到相同的区间
决策树和随机森林是为数不多不需要特征缩放的机器学习算法。
归一化
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)
标准化
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
X_train_std = stdsc.fit_transform(X_train)
X_test_std = stdsc.transform(X_test)
5.选择有意义的特征
过拟合模型具有较高的方差,建立在给定训练数据集上的模型过于复杂,常用的泛化误差的方案有:
1.收集更多的训练数据
2.通过正则化引入罚项
3.选择一个参数相对较少的简单模型
4.降低数据的维度
知识点5:使用L1正则化满足数据稀疏化
正则化专题:
添加L1和L2正则化有什么用?
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合
使得权重向量是稀疏的,意味着只有少数几个非零项。
from sklearn.linear_model import LogisticRegression
LogisticRegression(penalty='l1')
知识点6:使用*.coef_属性得到的权重数组
知识点7:序列特征选择算法
降维对未经正则化处理的模型特别有效。
序列后向选择算法(SBS)
知识点8:np.argsort方法
1、先定义一个array数据
1 import numpy as np
2 x=np.array([1,4,3,-1,6,9])
2、现在我们可以看看argsort()函数的具体功能是什么:
x.argsort()
输出定义为y=array([3,0,2,1,4,5])。
我们发现argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y。例如:x[3]=-1最小,所以y[0]=3,x[5]=9最大,所以y[5]=5。
知识点9:通过随机森林判定特征的重要性
通过森林中所有决策树得到的平均不纯度衰减来度量特征的重要性。
本章小结
本章的开始着眼于正确处理缺失数据的有⽤技术。在我们将数据导⼊到机器学习算法之前,应保证已对类别变量进⾏了正确的编码,我们还分别讨论了如何将有序特征和标称特征的值映射为整数的⽅法。
此外,我们还简要地讨论了L1正则化,它可以通过降低模型的复杂度来帮助我们避免过拟合。作为另外⼀种剔除不相关特征的⽅法,我们使⽤了序列特征选择算法从数据集中选择有意义的特征。
在下⼀章中,读者将学到另外⼀种降维的有效⽅法:特征提取。它使得我们可以将特征压缩到⼀个低维空间,⽽不是像特征选择那样完全剔除不相关特征。