您的位置:首页 > 编程语言 > Python开发

python机器学习第四章:数据预处理——构建好的训练数据集

2019-04-24 19:38 281 查看

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.处理类别数据

之前学习的为处理数值型数据的方法,然而在真实数据集中,往往出现一个或多个多类别特征列。

  1. 标称特征(nominal feature) 如颜色
  2. 有序特征(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正则化满足数据稀疏化

正则化专题:https://blog.csdn.net/zhaomengszu/article/details/81537197
添加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正则化,它可以通过降低模型的复杂度来帮助我们避免过拟合。作为另外⼀种剔除不相关特征的⽅法,我们使⽤了序列特征选择算法从数据集中选择有意义的特征。
在下⼀章中,读者将学到另外⼀种降维的有效⽅法:特征提取。它使得我们可以将特征压缩到⼀个低维空间,⽽不是像特征选择那样完全剔除不相关特征。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐