sklearn作为python机器学习的一个常用库,可以用来做特征工程,算法的调用,模型的评估
特征工程
特征工程包含特征选择,特征处理两个阶段
特征选择
特征。。在数据库或者excel表里应该是被称作是字段的吧,在编程语言里,应该是一个类的属性吧。
特征的选择,可以从两个方面来考虑(默认具有时效性,且已经完成数据的整合)
1。结合别人和自己的意见选取对自己业务有用的特征
2。有时候人的判断不准确,让函数方法来选择特征
(1)靠信息增益来表示自变量和目标变量之间的关联
(2)学习器自动选择特征,决策树,深度学习,正则化
特征处理
1。缺失值的处理
(1) 可以用该特征的平均值填充
(2)将特征分组或排序,每个组缺失值拿该组的平均值填充
(3)函数方法填充,自己选择
2。数据集的切割
做机器学习的时候一般将数据集切分成两块,分成训练集和验证集,将训练集训练出来的模型在验证集上进行评估,来判断模型的优劣
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(‘训练集/数组’,'验证集/列表',test_size=0.3,random_state='常数/随机数标签,用他就可以产生一样的随机数')
3。数据的离散化
(1)连续型特征,可以将该数据离散化,离散化的区间可以用自己判断,也可以来算法来选择
(2)类别型特征,可以将自己变成0和1的格式(one-hot编码)
from sklearn.feature_extraction import DictVectorizer
measurements = [{'city':'Beijing','temperature':33.},{'city':'London','temperature':12.},{'city':'San Fransisco','temperature':18.}]
vec = DictVectorizer(sparse=False/(为了输出是一个数组,如果不加是scipy库的一个类))
dict = DictVectorizer(sparse=False)
#输出转化后的特征矩阵
#to_dict(orient="records")dataframe变成了字典嵌套在列表里面
x = dict.fit_transform(pd.to_dict(orient="records"))
#输出转化后的特征矩阵
print(type(vec.fit_transform(measurements)))
print(vec.get_feature_names())
4。数据的标准化(数据值减平均值/标准差)
(1)数据的标准化是因为不同维度的数据间量级相差较大,a列1w八千的,b列0.8,0.9,进行模型拟合的时候,会带动模型的差错,标准化之后就是可以在同一个层次上进行比较
from sklearn.preprocessing import StandardScaler
# 需要标准化处理对于特征值处理
std_x = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.fit_transform(x_test)
# print(x_train)
# 对于目标值进行标准化
std_y = StandardScaler()
y_train = std_y.fit_transform(y_train)
y_test = std_y.transform(y_test)
5。数据的降维
(1)使用pca方法进行数据降维,可以理解成将数据经过一个投影到低维度上,但是他们相应的位置关系不变,所以他们包含的信息还
(2)主要目的是在不丢失原有数据信息的情况下降低机器学习算法的复杂度,及资源消耗。
sklearn.decomposition.PCA(n_components=“维度数或者保留数/int,string”, copy=True“默认T在副本上运算,f在原来数据集上运算”, whiten=False)
6。数据的归一化(不推荐,受异常值影响太大)