一,概论
1.什么是机器学习
定义:
机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。
其实就是通过问题和数据,发现规律,并进行预测,与人脑相似。目的就是从历史数据当中获得规律,以及历史数据是什么样的格式
数据集由特征值和目标值构成,每一行数据可以称为样本,有些数据可以没有目标值。
例:
监督学习:
目标值------类别------演变成分类问题
目标值------连续型的数据------演变成回归问题
目标值------无------无监督学习
注:无监督学习的定义:输入数据是由输入特征值所组成
机器学习开发流程:
1.获取数据
2.数据处理
3.特征工程
4.机器学习算法训练到模型
5.模型评估
6.应用
2.数据集
可用数据集
学习阶段可用的数据集:
sklearn
kaggle
ucI
2.1.2 sklearn数据集
(一) scikit-learn数据集API介绍
(1)sklearn.datasets
加载获取流行数据集
(2)datasets.load_*()
获取小规模数据集,数据包含在datasets里
(3)datasets.fetch_*(data_home=None)
获取大规模数据集,需要从网络上下载,函数的第一个参数是 data_home,表示数据集下载的目录,默认是~/scikit_learn_data/
(二)sklearn小数据集
sklearn.datasets.load_iris()3 3sklearn大数据集
sklearn.datasets.fetch_20newsgroups(data home=None,subset='train')
sklearn数据集返回值介绍
load和fetch返回的数据类型datasets.base.Bunch(字典格式)
(1) data:特征数据数组,是[n_samples* n_features]的二维 numpy.ndarray 数组
(2) target:标签数组,是n_samples的一维numpy.ndarray数组。 DESCR:数据描述
(3)feature_names:特征名,新闻数据,手写数字、回归数据集没有。 target_names:标签名
datasets.base.Bunch(继承自字典)
dict["key"l = values bunch.key = values
(三)机器学习一般的数据集会划分为两个部分:
训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效
划分比例:
训练集:70%80%75%
测试集:30%20% 30%
(四)数据集划分:
sklearn.model_selection.train_test_split(arrays, "options)
x数据集的特征值
y数据集的标签值
test_size测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同
的种子采样结果相同。
return训练集特征值,测试集特征值,训练集目标值,测试集目标值
2.2.2 什么是特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
意义:会直接影响机器学习的效果。
2.2.3特征工程的位置与数据处理的比较
pandas:一个数据读取非常方便以及基本的处理格式的工具
sklearn:对于特征的处理提供了强大的接口
特征工程包含内容:
特征抽取 :
机器学习算法-统计方法
文本类型 -> 数值类型 -> 数值
2.3.1特征提取
sklearn.feature extraction
2.3. 2 字典特征提取->类别 ->one-hot 编码
sklearn.feature_extraction.DictVectorizer(sparse= True,...)
vector 数学:向量。 物理:矢量
矩阵 matrix二维数组
向量 vector 一维数组
父类:转换器类
返回sparse矩阵
spare稀疏:将非0值 表示出来:节省内存---提高加载效率
应用场景:
(1)pclass,sex数据及当中类别特征比较多
1 将数据集的特征->字典类型
2 DictVectorizer转换
(2)本身拿到的数据就是字典类型
2.3.3 文本特征提取
单词作为特征
特征:特征词
方法1:CountVectorizer
统计每个样本特征出现的个数
stop_words停用的
停用词表
关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少
作用:对文本数据进行特征值化
(1)sklearn.feature_extraction.text.CountVectorizer(stop_words=0) 返回词频矩阵
(2)CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象返回值:返回sparse矩阵
(3)CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵返回值:转换之前数据格
(4)CountVectorizer.get_feature_names()返回值:单词列表
(5)sklearn.feature_extraction.text.TfidfVectorizer
该如何处理某个词或短语在多篇文章中出现的次数高这种情况
方法二:
TfidfVectorizer
Tf-idf文本特征提取
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
公式:词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目 ,再将得到的商取以10为底的对数得到
tfidf¡,j= tfi,jx idf¡
最终得出结果可以理解为重要程度。
特征预处理 :
2.4.1定义:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
(1)包含内容
数值型数据的无量纲化:
归一化
标准化
特征预处理API:
sklearn.preprocessing
为什么我们要进行归一化/标准化?
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
2.4.2归一化
定义:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
公式:

归一化API:
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)...)
MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array
2.4.3标准化:
1.定义:对原始数据进行变换把数据变换到均值为0,标准差为1范围内
2.公式:

即标准差:集中程度3.标准化API
sklearn.preprocessing.StandardScaler( )
处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1。 StandardScaler.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array
4.标准化应用场景:
在已有样本足够多的情况下,适合现代嘈杂的大数据场景。
总结:
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变。
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
特征降维:
2.5降维->降低纬度
降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组"不相关"主变量的过程。
2.5.1: ndarray
维数:嵌套的层数
0维 标量
1维 向量
2维 矩阵
3维...n维
处理对象:二维数组
此处的降维:降低随机变量(特征)个数。
效果:特征与特征之间互不相关
2.5.2 特征选择
1定义:数据中包括冗余或相关变量(或称特征属性指标等),旨在从原有特征中找出主要特征。
2方法
Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
方差选择法:低方差特征过滤
相关系数:特征与特征之间的相关程度
取值范围为[-1,+1]
如皮尔逊相关系数
Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
决策树:信息熵、信息增益
正则化:L1、L2
深度学习:卷积等
3模块:
sklearn.feature_selection
4过滤式
4.1低方差特征过滤
4.1.1 API
sklearn.feature_selection.VarianceThreshoid(threshold=0.0)
删除所有低方差特征
Variance.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非。零方差特征,即删除所有样本中具有相同值的特征。
4.2相关系数
4.2.3相关系数特点:
相关系数的值介于-1与+1之间,即-1≤r≤+1。其性质如下:
当r>0时,表示两变量正相关,r<0时,两变量为负相关
当|r|=1时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系
当0<|r|<1时,表示两变量存在一定程度的相关。且|r|越接近1,两变量间线性关系越密切;|r越接近于0,表示两变量的线性相关越弱
一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关
这个符号:|r|为r的绝对值,|-5|=5
4.2.4 API
from scipy.stats import pearsonr
x:(N,) array_like
y :(N,) array_like Returns: (Pearson's correlation coefficient, p- value)