一、数据集
数据集分为测试集和训练集。
1.学习阶段可用数据集
sklearn,kaggle,UCI
Scikit-learn工具介绍
python语言的机器学习工具,包含许多知名的机器学习算法的实现,文档完善,容易上手,丰富的API.
scikit-learn包含的内容
classification(分类),Regression(回归),Clustering(聚合),
数据集的划分
获取到数据之后,不能用全部的数据去训练模型,要留下一些数据进行模型评估。
机器学习一般的数据集会划分为两个部分:
1.训练数据:用于训练,构建模型。
2.测试数据:在模型检验时使用,用于评估模型是否有效。 一般20%~30%的数据用于测试
数据集划分API
这里导入的为 from sklearn.model_selection import train_test_split,在调用方法的时候就可以省略sklearn.model_selection前缀而直接调用train_test_split
二、特征工程
1.介绍
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。会直接影响机器学习的效果。
sklearn 特征工程
pandas 数据清洗、数据处理
2.特征提取/抽取
机器学习算法 - 统计方法 - 数学公式
如文本 -> 数值,转化成数值后才可以使用算法继续进行。
特征提取概念:将任意数据,如文本或图像,转换为可用于机器学习的数字特征,也叫做特征值化。
注: 特征值化是为了计算机更好地去理解数据,如字典特征提取(特征离散化),文本特征提取,图像特征提取(深度学习)。
2.1 特征提取API
2.2 字典特征提取 类别 -> one-hot编码
sparse=true,默认为转化为稀疏矩阵,不想稀疏矩阵形式就传入false
如:
vector --- 数学:向量 物理:矢量
矩阵matrix 在计算机中用二维 数组存储
向量vector 在计算机中用一位数组存储
2.3 文本特征提取
方法一:
把单词作为特征
途中该方法有一个参数stop_words=[],这个参数是给stop_words传一个列表,列表里放一些不需要提取特征值的词,在特征值化时就会自动忽略掉。
中文不会被自动分开成单个的词,一句话会被当成一个特征名字(目标值)。
这时就需要进行切分操作,将一整句话分成词。这时候需要导入jieba工具包,通过jieba.cut方法对文本进行分词。分词后jieba.cut会返回一个生成器类型的对象,这时候需要将其强转为list类型,最后用 " ".join()将文本分好的词用空格(" ")隔开。打印结果如下图。
练习,对大段话进行分词并特征提取
可以看到分词成功并且成功提取特征值,上图中打印的特征值数组中,最后一行第五个元素为5,则代表特征名字中第五个词出现了五次。
方法二:TfidfVectorizer ----TF-IDF文本特征提取
上面方法一的特征提取方法,提取出了特征名字的出现次数,但是这对文本分类并没有太大的帮助,对分类来说,最需要找到的是关键词。
关键词:在某一个类别的文章中,出现的次数很多,在其它类别的文章中出现的次数很少
tf-idf文本特征提取主要思想:
公式
API
练习
data_final中,值越大的元素对应的词,对于文本越重要。更具有分类意义
3.特征预处理
3.1什么是特征预处理
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
特征与处理包含:
数值型数据的无量纲化
(1)归一化
(2)标准化
3.2 特征预处理API
为什么需要归一化/标准化?
3.2.1 归一化
(1)公式
如上图的特征值1,第一行90,经过归一化之后:
x' = (90-60)/(90-60) = 1,x'' = 1*(1-0) + 0 = 1,故归一化之后90-->1,这样就缩小了特征值之间的差距。
(2)API
(3)数据计算
归一化公式是根据数据集中最大值最小值,来进行计算的,如果数据集中的最大值最小值出现异常值,会直接影响到最后的归一计算结果。所以这种方法鲁棒性较差,只适合传统精确小数据场景。
3.2.1 标准化
(1)定义
通过对原始数据进行变换把数据交换到均值为0,标准差为1范围内。
(2)公式
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
对于标准化来说:如果出现异常点,由于有一定的数据量,少量的异常点对平均值的影响并不大,从而方差/标准差改变较小。
(3)API
(4)练习
这里使用的数据集和上面归一化的数据是一样的
标准化应用场景:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景
4.特征降维
4.1 降维 - 降低维度
指在某些限定条件下,降低随机变量(特征)个数,得到一组不相关主变量的过程
正常我们所认为的维度:
如ndarray : 0维->标量, 1维->向量, 2维->矩阵......以此类推。
但降维并不是将我们认为的维度进行降低(如3维降到2维,2维降到1维),而是针对二维数组来说的,将二维数组作为处理对象,进行降维操作,即降低随机变量(特征)的个数,即降低列数。
相关特征(correlated feature):
如相对湿度与降雨量之间的相关
正因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征值间相关性较强,对于算法学习预测会影响较大。
4.2 降维的两种方式
(1)特征选择
(2)主要成分分析(可以理解为一种特征提取的方式)
4.3 什么是特征选择
4.3.1 定义
数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
4.3.2 方法
1、Filter(过滤式)
(1)方差选择法:低方差特征过滤
特征方差小:某个特征大多样本的值比较相近
特征方差大:某个特征很多样本的值都有差别
如果想区分鸟的种类,那么是否有爪子,嘴,翅膀,这种特征是每个鸟都具有的,用于区分的话效果不大,这种低方差特征就可以过滤掉
API
varianceThreshold()方法传入一个临界值参数threshold,当方差低于该临界值是,就将该特征删除
数据计算
(2)相关系数 - 衡量特征与特征之间的相关性(相关程度)
皮尔逊相关系数(Person Correlation Coefficient),反映变量之间相关关系密切程度的统计指标。
特征间相关性越高,说明特征值越相近,便没有必要都作为重要数据去进行统计计算,需要对相关系数高的特征进行一些处理
公式
最终计算出结果为0.9942,即广告费与月平均销售额之间的相关系数,可以得到结论是广告投入费与月平均销售额之间有高度的正相关关系。
特点
API
使用pearsonr(x, y)方法来计算相关系数。x,y为要进行计算相关性的两个特征
return:会返回两个数,第一个数为相关系数,第二个数为p-value
r1显示pe_ratio和pb_ratio两个特征呈负相关,但是数值很小,相关性极小。
r2显示revenue和total_expense两个特征呈正相关,且线性相关性很大。
如果特征与特征之间相关性很高(三种处理方法):
1.选取其中一个作为代表
2.加权求和作为一个新的特征
3.主成分分析
4.3 主成分分析
目标:应用PCA实现特征的降维
定义:
高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作用:
是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
应用:
回归分析或聚类分析当中
API
参数n_components如果是整数,即为我们要降维后要保留的特征数,即降维后的目标维数。如果是小数(0<n_components<1),代表满足最低的主成分方差累计贡献率。可以理解为降维后的特征,至少要能表示原数据n_components的特征。降维去掉的列数(特征/主成分)越多,且n_components越接近于1,则表示这个降维算法越好,因为去掉很多列,却仍能不失真,仍能表示出原数据的极大部分特征。
数据计算1
可以看到,传入0.95和2的降维输出一样,可以看出PCA算法效果很好,由4列降为2列,仍能保证降维后的数据能至少表示出原数据95%的信息,损失很小。
数据计算2 - 探究用户对物品类别的喜好细分
将多个数据表进行合并,找到要探究的特征间的关系,而后进行降维操作