Sklearn库
基于python的人工智能中机器学习的一个框架,包括许多知名的机器学习算法的实现,文档完善,有大量的API 。
scikit-learn的官方文档: http://scikit-learn.org/stable
- sklearn库的安装
目前sklearn的版本已经有0.20(安装sklearn库需要依赖pandas,numpy,scipy库,需要先安装)
pip install Scikit-learn==0.21
sklearn库的结构:
-
流程图解:
- 蓝色圆圈:判断的条件
- 绿色方框 :可以选择的算法
-
结构:
由上图,可以看到sklearn库的算法主要有四类:分类,回归,聚类,降维。**
- 常用回归:梯度下降回归(SGD)、Lasso回归、岭回归等。
- 常用分类:朴素贝叶斯、K近邻算法(KNN)、向量机(SVM)、决策树和随机森林、逻辑回归、GradientBoosting 等。
- 常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN。
- 常用降维:主成分分析(PCA)、线性判别分析(LDA)。
特征工程
业界广泛流传这么一句话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,使用专业的背景知识和技巧最大限度地从原始数据中提取并处理数据,使得特征在机器学习的算法上得到更好的发挥,会直接影响机器学习的效果 。
1. 特征抽取
将数据(如字典文本图像等)转化为可用于机器学习地数字特征
# 特征提取的API
sklearn.feature_extraction
-
字典特征提取
sklearn.feature_extraction.DictVectorizer(sparse=True,......) DictVectorizer.fit_transform(dict或者字典迭代器): # 返回sparse矩阵 DictVectorizer.inverse_transform(sparse矩阵或者数组): # 转换之前的数据格式 DictVectorizer.inverse_transform(): # 返回类别名字 # 对于特征当中存在类别信息的我们都会做one-hot编码处理
-
文本特征提取
sklearn.feature_extraction.text.CountVectorizer(stop_words=[],...) # 返回词频矩阵 CountVectorizer.fit_transform(txt): # txt为文本或者包含文本字符串的可迭代对象,返回sparse矩阵 CountVectorizer.inverse_transform(sparse矩阵或者数组):# 转换之前的数据格式 CountVectorizer.get_feature_names() # 单词列表 # 英文是以空格分词的,所以不支持单个汉字
对中文的分词处理:
# 安装jieba库 pip3 install jieba # 使用jieba.cut处理,content是词组的生成器 content = jieba.cut("今天的天气真糟糕,我想呆在家里学习.") # 将content转化成列表==>字符串 # ['今天', '的', '天气', '真糟糕', ',', '我', '想', '呆', '在', '家里', '学习', '.'] # 今天 的 天气 真糟糕 , 我 想 呆 在 家里 学习 c = ' '.join(list(content))
sklearn.feature_extraction.text.TfidfVectorizer
tf-idf文本特征提取:
sklearn.feature_extraction.text.TfidfVectorizer
tf (term frequency ):词频,指某一个给定的词语在该文件中出现的频率 ,即词语出现的次数除以文件的总词语数。
idf (inverse document frequency):逆文档频率 ,由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数即为idf。
tf-idf值即为tf * idf
-
图像特征提取
此处为深度学习的部分(暂且不在此解读)
2.特征预处理
# 特征预处理的API
sklearn.preprocessing
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 。
不属于同一量纲:即特征的规格不一样,不能够放在一起比较,所以我们需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格 。
-
归一化
通过对原始数据进行变换把数据映射到(默认为[0,1])之间
X ′ = x − m i n m a x − m i n ∗ ( m x − m i ) + m i X'=\frac{x-min}{max-min}*(mx-mi)+mi X′=max−minx−min∗(mx−mi)+mi
作用于每一列,max为一列的最大值,min为一列的最小值,那么X’为最终结果,mx,mi分别为指定区间值,默认mx为1,mi为0 。
# 归一化的API sklearn.preprocessing.MinMaxScaler(feature_range=(0,1),...) MinMaxScalar.fit_transform(X) # X为array格式的数据[n_samples,n_features] # 返回值:转换后的形状相同的array数据
归一化这个方法的最大值最小值非常容易受到异常点的影响,所以鲁棒性较差,只适合传统精确小数据场景。
-
标准化
通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
X ′ = x − m e a n σ X'=\frac{x-mean}{σ} X′=σx−mean
作用于每一列,mean为平均值,σ为标准差# 标准化的API sklearn.preprocessing.StandardScaler( ) # 处理之后每列来说所有数据都聚集在均值0附近标准差差为1 StandardScaler.fit_transform(X) # X为array格式的数据[n_samples,n_features] # 返回值:转换后的形状相同的array数据
因为最大值和最小值对于平均值的影响并不大,这样标准差的变化也会小,所以标准化方法比较稳定,适合大数据场景 。
3.特征降维
-
降维
降维是指在某些限定条件下,降低随机特征的数量,大多是冗余的数据去除,从而降低时间的复杂度和空间复杂度,获取更好的鲁棒性,方便更好地提取数据。
-
降维的方式
降维的方式分为线性和非线性,线性方法有PCA、LDA等等,非线性方法有基于权值、切空间、距离保持、核、神经网络等等。
-
特征选择
因为数据中包含大量的冗余的数据或者无关变量,所以从原有特征中挑选出主要特征
- Filter(过滤式):主要探究特征本身的特点以及特征和目标值之间关联
- 方差选择法: 删除所有低方差的特征
- 皮尔逊相关系数: 反映变量之间相关关系密切程度的统计指标
- Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)
- 决策树:信息熵、信息增益(分类算法)
- 正则化:L1正则化、L2正则化
- 深度学习:卷积等
- Wrapper (包裹式)
- Filter(过滤式):主要探究特征本身的特点以及特征和目标值之间关联
-
主成分分析(PCA)
寻找数据的主轴方向,由主轴构成一个新的坐标系,这里的维数可以比原维数低,然后数据由原坐标系向新坐标系投影,这个投影的过程就是PCA降维的过程。
# 主成分分析的API sklearn.decomposition.PCA(n_components=None) #将数据分解为较低维数空间 #n_components: 整数:减少到多少特征 n_components: 整数:减少到多少特征 PCA.fit_transform(X) X是numpy的array格式的数据[n_samples,n_features] # 返回值:转换后指定维度的array数据
-