机器学习:从数据中自动分析获得规律(模型),并利用规律对未知事物数据进行预测。
特征工程:将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,从而提高对未知数据预测的准确性。
特征工程内包含;一、特征抽取,二、数据特征的预处理,三、特征选择。 特征抽取目的:将字符串转换成数字,对文本数据特征值化。特征值化是为了让机器更好的理解数据。
字典特征值化抽取:对字典数据进行特征值化。(需要用到DicVectorizer)
from sklearn.feature_extraction import DicVectorizer
# fit_transform(x):X为字典或者含字典的迭代器,返回值为sparse矩阵。
# inverse_transform(x):x为sparse矩阵或者array数组,返回值为转换之前的数据格式。
# transform(x):按照原先的标准转换
# get_feature_names():返回类名称
返回一个sparse矩阵(储存的就是特征值化之后的结果)sparae矩阵中的0and1就是 onehot编码
文本特征抽取:对文本数据进行特征值化。
from sklearn.feature_extraction.text import CountVectorrizer
# fit_transform(x):x为文本或者包含文本字符串的可迭代对象,返回sparse矩阵
# inverse_transform(x):x为array数组或者sparse矩阵,返回转换之前的格式数据
# get_feature_names()
# tarry():将sparse矩阵换成数组
from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
res = vector.fit_transform(['left is is short,i love python','left is too long,i hate python'])
# print(res) #sparse矩阵
print(vector.get_feature_names())
print(res.toarray()) #将sparse矩阵转换成数组
#注意:单字母不统计(因为单个字母代表不了实际含义),然后每个数字表示的是单词出现的次数
特征的预处理:对数组型数据进行处理
无量纲化:通过特定的统计方法(数学方法),将数据转换成算法要求的数据
无量纲化方法:归一化和标准化。
归一化:在特定场景下最大值和最小值是变化的,另外最大最小值很容易受到异常值的影响,所以这种归一化的方式具有一定的局限性。因此引出了一种更好的方式叫做:标准化!!!
标准化:当数据按均值中心化后,再按标准差缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分 布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization)
特征选择:从特征中选择出有意义对模型有帮助的特征作为最终的机器学习输入的数据!
- 切记:
- 在做特征选择之前,有三件非常重要的事:跟数据提供者联系,跟数据提供者沟通,跟数据提供者开会。
- 一定要抓住给你提供数据的人,尤其是理解业务和数据含义的人,跟他们聊一段时间。技术能够让模型起飞,前提是你和业务人员一样理解数据。所以特征选择的第一步,其实是根据我们的目标,用业务常识来选择特征。
- 特征选择的原因:
- 冗余:部分特征的相关度高,容易消耗计算机的性能
- 噪点:部分特征对预测结果有偏执影响
- 特征选择的实现:
- 人为对不相关的特征进行主观舍弃
- 当然了,在真正的数据应用领域,比如金融,医疗,电商,我们的数据特征非常多,这样明显,那如果遇见极端情况,我们无法依赖对业务的理解来选择特征,该怎么办呢?
- 在已有特征和对应预测结果的基础上,使用相关的工具过滤掉一些无用或权重较低的特征
- 工具:
- Filter(过滤式)
- Embedded(嵌入式):决策树模型会自己选择出对其重要的特征。
- PCA降维
- 工具:
- 在已有特征和对应预测结果的基础上,使用相关的工具过滤掉一些无用或权重较低的特征
sklean模块:py中机器学习工具包含了很多知名的机器学习算法和实行,其文档完善,容易上手。