机器学习sklearn库浅学习

Posted 刺猬240

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习sklearn库浅学习相关的知识,希望对你有一定的参考价值。

目录

一.sklearn简介

(1)介绍:

(2)Scikit-learn(sklearn)特点:

(3)通用学习模式:

二.数据集与数据预处理

(1)数据集(sklearn.datasets)

(2)常用数据集:

(3)数据集读取代码 

(4)常用方法

(5) 数据预处理思路

(6)数据预处理代码

三.特征选择

sklean.feature_selection:

四.特征降维 

(1)sklearn.decomposition:

(2)sklearn.manifold :

五.模型构建 

(1)分类模型构建

(2)回归模型构建

(3)聚类模型构建

六.模型评估 

(1)分类模型

(2)回归模型 

(3)聚类模型


一.sklearn简介

(1)介绍:

Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,支持包括分类,回归,降维和聚类四大机器学习算法还包括了特征提取,数据处理和模型评估者三大模块。

(2)Scikit-learn(sklearn)特点:

· 建模无敌:用户通过scikit-learn能够实现各种监督和非监督学习的模型

· 功能多样:同时使用sklearn还能够进行数据的预处理、特征工程、数据集切分、模型评估等工作

· 数据丰富:内置丰富的数据集,比如:泰坦尼克、鸢尾花等

(3)通用学习模式:

首先 引入需要训练的数据, Sklearn 自带部分数据集,也可以通过相应方法进行构造然后 选择相应机器学习方法进行训练,训练过程中可以通过一些技巧调整参数,使得学习准确率更高最后 模型训练完成之后便可预测新数据,我们还可以通过 MatPlotLib 等方法来直观的展示数据

 *SKlearn中学习模式的调用,有很强的统一性,很多都是类似的,学会一个,其他基本差不多(Matplotlib 是Python中类似 MATLAB 的绘图工具)

二.数据集与数据预处理

(1)数据集(sklearn.datasets

获取小数据集(本地加载):datasets.load_xxx( )

获取大数据集(在线下载) datasets.fetch_xxx( )

本地生成数据集(本地构造): datasets.make_xxx( )

(2)常用数据集:

数据集

介绍

load_iris( )

鸢尾花数据集:3类、4个特征、150个样本

load_boston( )

波斯顿房价数据集:13个特征、506个样本

load_digits( )

手写数字集:10类、64个特征、1797个样本

load_breast_cancer( )

乳腺癌数据集:2类、30个特征、569个样本

load_diabets( )

糖尿病数据集:10个特征、442个样本

load_wine( )

红酒数据集:3类、13个特征、178个样本

load_files( )

加载自定义的文本(txt)分类数据集

(3)数据集读取代码 

from sklearn import datasets    
import matplotlib.pyplot as plt  #绘图  
    
iris = datasets.load_iris()  #导入鸢尾花数据集  
features = iris.data        #特征  
target = iris.target         #标签  
print(features.shape,target.shape)  #输出矩阵长度  
print(iris.feature_names)  #得到各个数据的名称  
    
boston = datasets.load_boston()  #导入波士顿房价数据集  
boston_features = boston.data    
boston_target = boston.target    
print(boston_features.shape,boston_target.shape)    
print(boston.feature_names)    

digits = datasets.load_digits()  #导入手写数字数据集
digits_features = digits.data  
digits_target = digits.target  
print(digits_features.shape,digits_target.shape)  
  
img = datasets.load_sample_image(‘flower.jpg’)  #导入图片数据集
print(img.shape)  
plt.imshow(img) #将数组的值以图片的形式展示出来 
plt.show()           #将plt.imshow()处理后的函数显示出来
  
data,target = datasets.make_blobs(n_samples=1000,n_features=2,centers=4,cluster_std=1) 
#生成各向同性的高斯斑点以进行聚类 
plt.scatter(data[:,0],data[:,1],c=target)  #绘制散点图
plt.show()  #显示图片
  

(4)常用方法

函数

功能

preprocessing.scale( )

标准化

preprocessing.MinMaxScaler( )

最大最小值标准化

preprocessing.StandardScaler( )

数据标准化

preprocessing.MaxAbsScaler( )

绝对值最大标准化

preprocessing.QuantileTransformer( )

使用分位数信息变换特征

preprocessing.PowerTransformer( )

使用幂变换执行到正态分布的映射

preprocessing.Normalizer( )

正则化

preprocessing.OrdinalEncoder( )

将分类特征转换为分类数值

preprocessing.LabelEncoder( )

将分类特征转换为分类数值

preprocessing.MultiLabelBinarizer( )

多标签二值化

preprocessing.OneHotEncoder( )

独热编码

preprocessing.KBinsDiscretizer( )

将连续数据离散化

preprocessing.FunctionTransformer( )

自定义特征处理函数

preprocessing.Binarizer( )

特征二值化

preprocessing.Imputer( )

弥补缺失值

preprocesssing.Normalizer( )

正则化

(5) 数据预处理思路

1.首先要明确有多少特征,哪些是连续的,哪些是类别的。

2.检查有没有缺失值,对确实的特征选择恰当方式进行弥补,   使数据完整。

3.对连续的数值型特征进行标准化,使得均值为0,方差为1。

4.对类别型的特征进行one-hot编码。

5.将需要转换成类别型数据的连续型数据进行二值化。

6.为防止过拟合或者其他原因,选择是否要将数据进行正则化。

7.在对数据进行初探之后发现效果不佳,可以尝试使用多项式方法,寻找非线性的关系。

8.根据实际问题分析是否需要对特征进行相应的函数转换

(6)数据预处理代码

import numpy as np  
from sklearn import preprocessing  
#标准化:将数据转换为均值为0,方差为1的数据,即标注正态分布的数据  
x = np.array([[1,-1,2],[2,0,0],[0,1,-1]])  #定义矩阵
x_scale = preprocessing.scale(x)         #得到的X_scaled中每列的均值为0,方差为1
print(x_scale.mean(axis=0),x_scale.std(axis=0))  #查看均值方差和标准差 
  
std_scale = preprocessing.StandardScaler().fit(x)  #计算出数据预处理算法的一些参数
x_std = std_scale.transform(x)  #进行数据处理
print(x_std.mean(axis=0),x_std.std(axis=0)) #查看均值方差和标准差 
  
#将数据缩放至给定范围(0-1)  
mm_scale = preprocessing.MinMaxScaler()  
x_mm = mm_scale.fit_transform(x)  #先拟合数据,然后转化它将其转化为标准形式
print(x_mm.mean(axis=0),x_mm.std(axis=0)) #查看均值方差与标准差

#将数据缩放至给定范围(-1-1),适用于稀疏数据  
mb_scale = preprocessing.MaxAbsScaler()  #缩放每个特征,每个属性除以其所在属性列的最大值
x_mb = mb_scale.fit_transform(x)   #先拟合数据,然后转化它将其转化为标准形式
print(x_mb.mean(axis=0),x_mb.std(axis=0))   #查看均值方差与标准差
  
#适用于带有异常值的数据  
rob_scale = preprocessing.RobustScaler()  #缩放带有异常值(离群值)的数据
x_rob = rob_scale.fit_transform(x)  
print(x_rob.mean(axis=0),x_rob.std(axis=0))  
  
#正则化  
nor_scale = preprocessing.Normalizer()  #属性缩放到一个指定的最大和最小值
x_nor = nor_scale.fit_transform(x)  
print(x_nor.mean(axis=0),x_nor.std(axis=0))

#特征二值化:将数值型特征转换位布尔型的值  
bin_scale = preprocessing.Binarizer()  
x_bin = bin_scale.fit_transform(x)  
print(x_bin)  
  
#将分类特征或数据标签转换位独热编码  
ohe = preprocessing.OneHotEncoder()  
x1 = ([[0,0,3],[1,1,0],[1,0,2]])  
x_ohe = ohe.fit(x1).transform([[0,1,3]])  
print(x_ohe)  

import numpy as np  
from sklearn.preprocessing import PolynomialFeatures  
  
x = np.arange(6).reshape(3,2)  
poly = PolynomialFeatures(2)  
x_poly = poly.fit_transform(x)  
print(x)  
print(x_poly)  
  
import numpy as np  
from sklearn.preprocessing import FunctionTransformer  

#自定义的特征转换函数  
transformer = FunctionTransformer(np.log1p)  
  
x = np.array([[0,1],[2,3]])  
x_trans = transformer.transform(x)  
print(x_trans)  
  
import numpy as np  
import sklearn.preprocessing  
  
x = np.array([[-3,5,15],[0,6,14],[6,3,11]])  
kbd = preprocessing.KBinsDiscretizer(n_bins=[3,2,2],encode='ordinal').fit(x)  
x_kbd = kbd.transform(x)  
print(x_kbd)  

from sklearn.preprocessing import MultiLabelBinarizer  
  
#多标签二值化  
mlb = MultiLabelBinarizer()  
x_mlb = mlb.fit_transform([(1,2),(3,4),(5,)])  
print(x_mlb)  

三.特征选择

很多时候我们用于模型训练的数据集包含许多的特征,这些特征要么是有冗余,要么是对结果的相关性很小;这时通过精心挑选一些"好"的特征来训练模型,既能减小模型训练时间,也能够提升模型性能。

sklean.feature_selection:

函数

功能

feature_selection.SelectKBest( )

选择K个得分最高的特征

feature_selection.chi2

feature_selection.f_regression

feature_selection.mutual_info_regression

feature_selection.VarianceThreshold( )

无监督特征选择

feature_selection.REF( )

递归式特征消除

feature_selection.REFCV( )

递归式特征消除交叉验证法

feature_selection.SelectFromModel( )

特征选择

四.特征降维 

面对特征巨大的数据集,除了进行特征选择之外,我们还可以采取特征降维算法来减少特征数;特征降维于特征选择的区别在于:特征选择是从原始特征中挑选特征;而特征降维则是从原始特征中生成新的特征。很多人会有比较特征选择与特征降维优劣的心理,其实这种脱离实际问题的比较意义不大,我们要明白每一种算法都是有其擅长的领域。

(1)sklearn.decomposition:

函数

功能

decomposition.PCA( )

主成分分析

decomposition.KernelPCA( )

核主成分分析

decomposition.IncrementalPCA( )

增量主成分分析

decomposition.MiniBatchSparsePCA( )

小批量稀疏主成分分析

decomposition.SparsePCA( )

稀疏主成分分析

decomposition.FactorAnalysis( )

因子分析

decomposition.FastICA( )

独立成分分析的快速算法

decomposition.DictionaryLearning( )

字典学习

(2)sklearn.manifold :

函数

功能

manifold.LocallyLinearEmbedding( )

局部非线性嵌入

manifold.Isomap( )

流形学习

manifold.MDS( )

多维标度法

manifold.t-SNE( )

t分布随机邻域嵌入

decomposition.NMF( )

非负矩阵分解

manifold.SpectralEmbedding( )

频谱嵌入非线性降维

五.模型构建 

(1)分类模型构建

1.sklearn.liner_model(多元线性回归)

2.Sklearn.ensemble(集成学习)

3.Sklearn.tree(决策树)

4.Sklearn.gaussian_process(高斯过程,解决回归和概率分类)

5.Sklearn.svm(支持向量机)

6.Sklearn.neighbors(回归模型)

7.Sklearn.discriminant_analysis(线性判别分析)

8.Sklearn.anive_bayes(朴素贝叶斯)

(2)回归模型构建

1.sklearn.liner_model(多元线性回归)

2.Sklearn.ensemble(集成学习)

3.Sklearn.gaussian_process(高斯过程,解决回归和概率分类)

4.Sklearn.svm(支持向量机)

5.Sklearn.neighbors(回归模型)

6.Sklearn.tree(决策树)

7.Sklearn.cross_decomposition(交叉分解)

8.Sklearn.kernel_ridge(岭回归)

(3)聚类模型构建

sklearn.cluster

算法

功能

cluster.DBSCAN( )

基于密度的聚类

cluster.GaussianMixtureModel( )

高斯混合模型

cluster.AffinityPropagation( )

吸引力传播聚类

cluster.AgglomerativeClustering( )

层次聚类

cluster.Birch( )

利用层次方法的平衡迭代聚类

cluster.KMeans( )

K均值聚类

cluster.SpectralClustering( )

谱聚类

cluster.MiniBatchKMeans( )

小批量K均值聚类

cluster.GaussianMixtureModel( )

高斯混合模型

cluster.MeanShift( )

平均移位聚类

cluster.OPTICS( )

层次聚类

cluster.Birch( )

基于点排序来识别聚类结构

cluster.Biclustering( )

双聚类

cluster.ward_tree( )

集群病房树

方法

功能

xxx.fit( )

模型训练

xxx.get_params( )

获取模型参数

xxx.predict( )

预测新输入数据

xxx.score( )

评估模型分类/回归/聚类模型

六.模型评估 

(1)分类模型

函数

功能

metrics.accuracy_score( )

准确率

metrics.average_precision_score( )

平均准确率

metrics.log_loss( )

对数损失(用于评估分类器的概率输出)

metrics.confusion_matrix( )

混淆矩阵(总结分类模型预测结果的情形分析表)

metrics.classification_report( )

分类模型评估报告:准确率、召回率、F1-score(精确率和召回率的调和平均数)

metrics.roc_curve( )

ROC曲线(比较诊断性实验的效果,是否有应用价值)

metrics.auc( )

ROC曲线下面积

(2)回归模型 

函数

功能

metrics.mean_squared_error( )

平均决定误差(预测值和观测值之间绝对误差的平均值

metrics.median_absolute_error( )

中值绝对误差(样本偏差的一种鲁棒性测量)

metrics.r2_score( )

决定系数(判断回归方程拟合的程度

(3)聚类模型

函数

功能

metrics.adjusted_rand_score( )

随机兰德调整指数(聚类结果与真实情况的吻合情况)

metrics.silhouette_score( )

轮廓系数(评价聚类效果的好坏)

以上是关于机器学习sklearn库浅学习的主要内容,如果未能解决你的问题,请参考以下文章

机器学习sklearn----通过轮廓系数确定适合的n_clusters

机器学习sklearn----通过轮廓系数确定适合的n_clusters

机器学习:决策树——sklearn决策树调参

机器学习实战基础(十七):sklearn中的数据预处理和特征工程特征选择 之 Embedded嵌入法

机器学习实战基础(十七):sklearn中的数据预处理和特征工程特征选择 之 Embedded嵌入法

机器学习 sklearn 监督学习 分类算法 决策树 DecisionTree