常用数据集结构:
特征值+目标值
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。
sklearn特征抽取API:
sklearn.feature_extraction
字典的特征提取的类:
sklearn.feature_extraction.DictVectorizer
DictVectorizer.fit_transform(X)
DictVectorizer.inverse_transform(X)
DictVectorizer.get_feature_names()
def dictvec():
"""
字典数据抽取
:return: None
"""
# 实例化
dict = DictVectorizer(sparse=False)
# 调用fit_transform
data = dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
print(dict.get_feature_names())
print(dict.inverse_transform(data))
print(data)
return None
运行结果为:
['city=上海', 'city=北京', 'city=深圳', 'temperature']
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
若实例化时默认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-idf的类:
sklearn.feature_extraction.text.TfidfVectorizer
TfidfVectorizer(stop_words=None,…)
TfidfVectorizer.fit_transform(X,y)
TfidfVectorizer.inverse_transform(X)
TfidfVectorizer.get_feature_names()
def tfidfvec():
"""
中文特征值化
:return: None
"""
# c1,c2,c3是三个文本分词后得到的列表
c1, c2, c3 = cutword()
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
return None
特征预处理方法:
数值型数据:
归一化
标准化
缺失值处理
类别型数据:
one-hot编码
时间型数据:
对时间的切分、处理
归一化:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
归一化的类:
sklearn.preprocessing.MinMaxScaler
归一化语法:
MinMaxScalar(feature_range=(0,1)…)
MinMaxScalar.fit_transform(X)
def mm():
"""
归一化处理
:return: NOne
"""
# 实例化
mm = MinMaxScaler(feature_range=(2, 3))
# 利用MinMaxScaler.fit_transform
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
标准化:通过对原始数据进行变换把数据变换到均值为0、方差为1范围内。
标准化的类:
scikit-learn.preprocessing.StandardScaler
标准化的语法:
StandardScaler(…)
StandardScaler.fit_transform(X,y)
StandardScaler.mean_
StandardScaler.std_
def stand():
"""
标准化缩放
:return:
"""
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
缺失值通常使用pandas进行处理,而sklearn中也提供了缺失值处理的API。
sklearn中缺失值处理的API:
sklearn.preprocessing.Imputer
Imputer语法
Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)
Imputer.fit_transform(X,y)
def im():
"""
缺失值处理
:return:None
"""
# 实例化
im = Imputer(missing_values='NaN', strategy='mean', axis=0)
# 使用fit_transform
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None
数据的降维指的是减少特征值的数量,即特征选择。
数据降维的原因:通过特征选择可以减少数据集的冗余和噪声。
三大方法:
Filter 过滤式:VarianceThreshold
(特征选择方式还包括神经网络)
Embedded 嵌入式:正则化、决策树
Wrapper 包裹式
方差特征选择的API为:
sklearn.feature_selection.VarianceThreshold
VarianceThreshold(threshold = 0.0)
Variance.fit_transform(X,y)
def var():
"""
特征选择-删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=1.0)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
运行结果为:
[[0]
[4]
[1]]
PCA:压缩数据维数,尽可能降低原数据的维数(复杂度),损失少量信息。可以削减回归分析或者聚类分析中特征的数量。
高维度数据容易出现的问题:特征之间通常是线性相关的
PCA的API为:
sklearn. decomposition.PCA
PCA(n_components=None)
PCA.fit_transform(X)
def pca():
"""
主成分分析进行特征降维
:return: None
"""
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None