特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。
sklearn特征抽取API:
sklearn.feature_extraction字典的特征提取的类:
sklearn.feature_extraction.DictVectorizerDictVectorizer.fit_transform(X)
X:字典或者包含字典的迭代器返回值:返回sparse矩阵DictVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵返回值:转换之前数据格式DictVectorizer.get_feature_names()
返回类别名称若实例化时默认sparse=True,则data输出为:
(0, 1) 1.0 (0, 3) 100.0 (1, 0) 1.0 (1, 3) 60.0 (2, 2) 1.0 (2, 3) 30.0文本特征值化的类:
from sklearn.feature_extraction.text import CountVectorizer def countvec(): """ 对文本进行特征值化 :return: None """ cv = CountVectorizer() data = cv.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"]) print(cv.get_feature_names()) print(data.toarray()) return None 运行结果为: ['python', '不用', '人生', '人生漫长', '喜欢', '苦短'] [[1 0 1 0 1 1] [1 1 0 1 0 0]]PS:对于长的中文文本,使用jieba库来分割文本。并将分词结果变成字符串当作fit_transform的输入值。
tf-idf的作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度,是分类机器学习算法的重要依据。
tf:term frequency 统计词出现的次数(频率)idf:inverse document frequency 逆文档频率 log(总文档数量/该词出现的文档数量)tf*idf:重要性tf-idf的类:
sklearn.feature_extraction.text.TfidfVectorizerTfidfVectorizer(stop_words=None,…)
返回值:词的权重矩阵stop_words:忽略的词TfidfVectorizer.fit_transform(X,y)
X:文本或者包含文本字符串的可迭代对象返回值:返回sparse矩阵TfidfVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵返回值:转换之前数据格式TfidfVectorizer.get_feature_names()
返回值:单词列表特征预处理方法:
数值型数据: 归一化 标准化 缺失值处理 类别型数据: one-hot编码 时间型数据: 对时间的切分、处理归一化:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
归一化的类:
sklearn.preprocessing.MinMaxScaler归一化语法:
MinMaxScalar(feature_range=(0,1)…)
每个特征缩放到给定范围(默认[0,1])MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]返回值:转换后的形状相同的array最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
标准化:通过对原始数据进行变换把数据变换到均值为0、方差为1范围内。
标准化的类:
scikit-learn.preprocessing.StandardScaler标准化的语法: StandardScaler(…)
处理之后每列来说所有数据都聚集在均值0附近方差为1StandardScaler.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]返回值:转换后的形状相同的arrayStandardScaler.mean_
原始数据中每列特征的平均值StandardScaler.std_
原始数据每列特征的方差如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。 在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
缺失值通常使用pandas进行处理,而sklearn中也提供了缺失值处理的API。
sklearn中缺失值处理的API:
sklearn.preprocessing.ImputerImputer语法
Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)
完成缺失值插补Imputer.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]返回值:转换后的形状相同的array数据的降维指的是减少特征值的数量,即特征选择。 数据降维的原因:通过特征选择可以减少数据集的冗余和噪声。
三大方法: Filter 过滤式:VarianceThreshold (特征选择方式还包括神经网络) Embedded 嵌入式:正则化、决策树 Wrapper 包裹式
方差特征选择的API为:
sklearn.feature_selection.VarianceThresholdVarianceThreshold(threshold = 0.0)
删除所有低方差特征Variance.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。PCA:压缩数据维数,尽可能降低原数据的维数(复杂度),损失少量信息。可以削减回归分析或者聚类分析中特征的数量。
高维度数据容易出现的问题:特征之间通常是线性相关的
PCA的API为:
sklearn. decomposition.PCAPCA(n_components=None)
将数据分解为较低维数空间n_components参数可以输入小数,表示保留多少比例的数据PCA.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]返回值:转换后指定维度的array