python机器学习基础特征工程算法详解
一、机器学习概述
机器学习是从数据中,自动分析获得规律(模型),并利用规律对未知数据进行预测。
二、数据集的构成
1.数据集存储
机器学习的历史数据通常使用csv文件存储。
不用mysql的原因:
1、文件大的话读取速度慢;
2、格式不符合机器学习要求的格式
2.可用的数据集
Kaggle:大数据竞赛平台、80万科学家、真实数据、数据量巨大
Kaggle网址:https://www.kaggle.com/datasets
UCI:360个数据集、覆盖科学生活经济等领域、数据量几十万
UCI数据集网址: http://archive.ics.uci.edu/ml/
scikit-learn:数据量较小、方便学习
scikit-learn网址:http://scikit-learn.org/stable/datasets/index.html#datasets
3.常用数据集的结构
特征值(用以判断目标值所用的条件:比如房子的面积朝向等)+目标值(希望实现的目标:比如房子价格)
有些数据集可以没有目标值。
三、特征工程
”将原始数据转换为能更好地代表预测模型的潜在问题的特征“的过程,叫做特征工程,能够提高对未知数据的预测准确性。特征如果不好,很可能即使算法好,结果也不会尽如人意。
pandas可用于数据读取、对数据的基本处理
sklearn有更多对于特征的处理的强大的接口
特征抽取:
特征抽取API:sklearn.feature_extraction
1.字典数据特征抽取
API:sklearn.feature_extraction.DictVectorizer
语法如下:
字典数据抽取:将字典中的类别数据分别进行转换为特征数据。因此,如果输入的是数组形式,并且有类别的这些特征,需要先转换成字典数据,然后进行抽取。
2.文本特征抽取
Count
类:sklearn.feature_extraction.text.CountVectorizer
用法:
1.统计所有文章当中所有的词,重复的只看做一次
2.对每篇文章,在词的列表里面,统计每个词出现的次数
3.单个字母不统计
注意:该方法默认不支持中文,每个中文汉字被视为一个英文字母,中间有空格或者逗号就会被分开,同样的,一个汉字不予统计。(中文可使用jieba分词:pip install jieba,使用:jieba.cut("我是一个程序员"))
3.文本特征抽取:tf-idf
上面的countvec不能处理中性词比如“明天,中午,因为”等。于是可以使用tfidf方法。
tf
:term frequency词频(和countvec方法一样)
idf
:inverse document frequency逆文档频率 log(总文档数量/该词出现的文档数)
tf * idf 重要性程度
类:sklearn.feature_extraction.text.TfidfVectorizer
4.特征预处理:归一化
特征预处理:通过特定的统计方法,将数据转换为算法要求的数据
特征预处理API:sklearn.preprocessing
归一化API:sklearn.preprocessing.MinMaxScaler
多个特征同等重要并且特征数据之间差距较大的时候,进行归一化。但归一化容易受异常点的影响,因此该方法鲁棒性较差,只适合传统精确小数据场景。
5.特征预处理:标准化
将原始数据变换到均值为0,标准差为1的范围内
标准化API:
sklearn.preprocessing.StandardScaler
标准化适合现代嘈杂大数据场景,在已有样本足够多的情况下比较稳定。
6.特征预处理:缺失值处理
插补:通过缺失值每行或每列的平均值、中位数来填补(一般按列填补)
API:sklearn.impute.SimpleImputer
数据当中的缺失值标记:默认为np.nan