一、机器学习概述
1.1人工智能概述
1.1.1机器学习是人工智能的一个实现途径
1.1.2深度学习是从机器学习的一个方法(人工神经网络)发展而来
1.1.3机器学习的主要应用领域
1、自然语言处理
2、图像识别
3、传统预测
1.2机器学习是啥
1.2.1数据
1、结构:特征值+目标值
2、dataFrame行索引列索引表格
3、每一行数据称为一个样本
4、有些数据集可以没有目标值
1.2.2模型
1.2.3预测
1.3机器学习开发流程
1)获取数据
2)数据处理
3)特征工程
4)算法训练-模型
5)模型评估
6)应用
1.4机器学习算法分类
1.4.1监督学习(有目标值,输入数据有特征有标签,即有标准答案)
1、分类算法(其目标值是类别)
1)逻辑回归
2)k-近邻算法
3)贝叶斯分类
4)决策树与随机森林
2、回归算法(其目标值是连续型的数据)
1)岭回归
2)线性回归
1.4.2无监督学习(无目标值,输入数据有特征无标签,即无标准答案)
1、聚类算法
1)k-means
1.5算法是核心,数据和计算是基础
二、特征工程(数据中对于特征的处理)
2.1数据集
2.1.1可用数据集
1、kaggle
2、uci
3、scikit-learn
ps:一般是csv文件,处理工具是pandas
2.1.2sklearn数据集
1、sklearn.datasets 加载获取流行数据集
1)load_* 小规模的数据集
例如:sklearn.datasets.load_iris()
注意:*表示数据集名字
2)fetch_* 大规模的数据集
例如:sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
data_home:None表示不指定,则默认下载到家目录(C:\Users\yubaby\scikit_learn_data)
subset:选择要加载的数据集,可选"训练集"train\"测试集"test\"全部"all
2、数据集的返回值是Bunch类型(字典格式)
1)load和fetch返回的数据类型都是datasets.base.Bunch(继承自字典)
2)Bunch的结构
{'data': 数据数组(是[samples*features]的二维numpy.ndarray),
'target':标签数组(是[samples]的一维numpy.ndarray),
'DESCR':数据描述,
'feature_names':特征名,
'target_names':标签名}
3)Bunch类型的数据访问方法
法一:dict["key"] = values
法二:bunch.key = values
3、numpy&pandas是sklearn库的依赖库
sklearn库有一下六方面用途:
1)classification分类
2)regression回归
3)clustering聚类
4)dimensionality reduction降维
5)model selection模型选择
6)preprocessing特征工程
2.1.3数据集划分
1、训练数据:用于训练,构建模型
训练集占比80%~70%
2、测试数据:在模型检验时使用,用于评估模型是否有效
测试集占比20%~30%
3、sklearn.model_selection.train_test_split(arrays, *options)
例如:x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
注意:特征值必选,其余三项可选
1)x数据集的特征值,y数据集的目标值
2)test_size测试集的大小,一般为float
3)random_state随机数种子,不同种子造成不同的随机采样结果,相同种子则采样结果相同
4)return
训练集特征值,测试集特征值,训练集目标值,测试集目标值
x_train, x_test, y_train, y_test
2.2特征工程
2.2.1特征工程简介
1、数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
2、特征工程直接影响机器学习的效果
3、sklearn对特征工程提供强大接口
pandas是数据清洗、数据处理工具
4、特征工程包含内容:
1)特征抽取(提取)
2)特征预处理
3)特征降维
2.2.2特征抽取
1、机器学习算法-统计方法-数学公式
例如:如何将文本转换为数值或类型转换为数值
2、sklearn.feature_extraction
1)字典特征抽取(特征离散化)
方法:sklearn.feature_extraction.DictVectorizer(sparse=True,…)
PS:实例化一个转换器类transfer
sparse默认为True
矩阵 matrix 二维数组
向量 vector 一维数组
若有特征为类别,则sparse设置为False,数据转换为one-hot编码(哑变量)
具体调用:
DictVectorizer.fit_transform(x)
参数x:字典或者包含字典的迭代器(如元素为字典的列表)
返回值:sparse矩阵
DictVectorizer.inverse_transform(x)
参数x:array数组或者sparse矩阵
返回值:转换之前的数据格式
DictVectorizer.get_feature_names()
返回值:特征名称
sparse稀疏矩阵
形式:将非零值按位置表示出来
目的:节省内存,提高加载效率
字典特征抽取的应用场景
场景1:数据集当中类别特征比较多
场景2:本身拿到的数据就是字典类型
2)文本特征抽取
常将文本的单词(而不是字母,短语或句子)作为特征,称为特征词(中文中常用词语)
方法一:sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
PS:返回词频矩阵
统计每个样本特征词出现的个数
可选stop_words是停用词表,多为虚词
注意若文本为中文时需要分词,手动分词或利用jieba自动分词
具体调用:
CountVectorizer.fit_transform(x)
参数x:文本或者包含文本字符串的可迭代对象
返回值:sparse矩阵
CountVectorizer.inverse_transform(x)
参数x:array数组或者sparse矩阵
返回值:转换之前的数据格式
CountVectorizer.get_feature_names()
返回值:单词列表
方法二:sklearn.feature_extraction.text.TfidfVectorizer(stop_words=[])
PS:返回词频矩阵
TF-IDF:词频-逆向文档频率
TF-IDF文本特征提取的主要思想:
若某个词/短语在某篇文章中出现的概率高,而在其他文章中很少出现,
则认为该词/短语具有很好的区分能力,称之为关键词。
TF-IDF作用:评估某词对于某一文件集/语料库中的某份文件的重要程度。
方法一不能很容易地找出关键词,方法二解决了这个问题。
TF-IDF=tf*idf具体求解见视频
具体调用:
TfidfVectorizer.fit_transform(x)
参数x:文本或者包含文本字符串的可迭代对象
返回值:sparse矩阵
TfidfVectorizer.inverse_transform(x)
参数x:array数组或者sparse矩阵
返回值:转换之前的数据格式
TfidfVectorizer.get_feature_names()
返回值:单词列表
3)图像特征提取(深度学习部分)
2.2.3特征预处理
1、什么是特征预处理?
通过一些转换函数将特征数据转换成更加适合算法模型的新特征数据的过程。
2、特征预处理的内容
1)数值型数据的无量纲化(即使不同规格的数据转换为统一规格)
2)无量纲化的方法:
归一化(通过对原始数据进行变换将数据映射到固定区间(默认[0,1])之间)(X',X''具体求解见视频)
标准化(通过对原始数据进行变换将数据变换到均值为0,标准差为1的范围内)(X'具体求解见视频)
PS:其中标准化较为常用
3、API:sklearn.preprocessing
1)归一化MinMaxScaler()
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1))
MinMaxScaler.fit_transform(x)
参数x:形如[n_samples,n_features]的ndarray数组
返回值:形如n_samples*n_features的array
2)标准化StandardScaler()
sklearn.preprocessing.StandardScaler()
StandardScaler.fit_transform(x)
参数x:形如[n_samples,n_features]的ndarray数组
返回值:形如n_samples*n_features的array
2.2.4特征降维
1、降维=降低维度
1)ndarray中维数=嵌套的层数
0维 标量
1维 向量
2维 矩阵
... ...
n维 ...
2)特征降维中:
降维对象是二维数组
降维是指降低特征的个数
效果是使特征与特征之间不相关
2、特征选择(从数据的原有特征中找出主要特征)
1)Filter过滤式:
方差选择法:低方差特征过滤
特征方差小:某个特征大多样本的值比较接近
特征方差大:某个特征大多样本的值都有差别
相关系数:特征与特征之间的相关程度
皮尔逊相关系数:反映变量之间相关关系密切程度的统计指标(r具体求解见视频)
取值范围:–1≤r≤+1
r>0:两变量正相关;r<0:两变量负相关
r=1:两变量完全相关;r=0:两变量不相关
|r|<0.4为低度相关
0.4≤|r|<0.7为显著性相关
0.7≤|r|<1为高度线性相关
特征与特征之间相关性很高:
1)选取其中一个
2)加权求和
3)主成分分析
2)Embeded嵌入式:算法自动选择特征(后续课程学习)
决策树:信息熵、信息增益等
正则化:L1、L2
深度学习:卷积等
3、过滤式
1)低方差特征过滤
sklearn.feature_selection.VarianceThreshold(threshlod=0.0)
删除低方差特征,阈值方差threshlod默认为0
VarianceThreshold.fit_transform(x)
参数x:形如[n_samples,n_features]的ndarray数组
返回值:训练集差异低于threshlod的特征都将被删除
默认值是保留所有非零方差特征
即删除所有样本中具有相同值得特征
2)皮尔逊相关系数
from scipy.stats import pearsonr
r=pearsonr(x,y)
参数x、y:例如data["pe_ratio"], data["pb_ratio"]
返回值:(相关性,P值),P值表示显著水平且越小越好
2.3主成分分析
2.3.1什么是PCA=主成分分析
1、定义
高维数据转化为低维数据的过程,在此过程中可能舍弃原有数据、创造新数据
2、作用
使数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
3、应用
回归分析或聚类分析
2.3.2API
sklearn.decomposition.PCA(n_components=None)
1、将数据分解为较低维的空间
2、n_components
1)小数:表示保留百分之多少的信息
2)整数:减少到多少特征
3、PCA.fit_transform(x)
1)参数x:形如[n_samples,n_features]的ndarray数组
2)返回值:转换后指定维度的array
2.3.3案例:探究用户对物品类别的喜好细分降维
instacart市场菜篮子分析
instacart消费者将购买哪些产品
用户 物品类别
user_id aisle
1)需要将user_id和aisle放在同一个表中 -> 合并
2)找到user_id和aisle -> 交叉表和透视表
3)(放在同一个表后发现有大量0)特征冗余过多 -> PCA降维