机器学习sklearn库浅学习
Posted 刺猬240
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习sklearn库浅学习相关的知识,希望对你有一定的参考价值。
目录
一.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中的数据预处理和特征工程特征选择 之 Embedded嵌入法