目录
一.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)聚类模型
Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,支持包括分类,回归,降维和聚类四大机器学习算法。还包括了特征提取,数据处理和模型评估者三大模块。
· 建模无敌:用户通过scikit-learn能够实现各种监督和非监督学习的模型
· 功能多样:同时使用sklearn还能够进行数据的预处理、特征工程、数据集切分、模型评估等工作
· 数据丰富:内置丰富的数据集,比如:泰坦尼克、鸢尾花等
*SKlearn中学习模式的调用,有很强的统一性,很多都是类似的,学会一个,其他基本差不多(Matplotlib 是Python中类似 MATLAB 的绘图工具)
获取小数据集(本地加载):datasets.load_xxx( )
获取大数据集(在线下载): datasets.fetch_xxx( )
本地生成数据集(本地构造): datasets.make_xxx( )
数据集 |
介绍 |
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)分类数据集 |
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() #显示图片
函数 |
功能 |
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( ) |
正则化 |
1.首先要明确有多少特征,哪些是连续的,哪些是类别的。
2.检查有没有缺失值,对确实的特征选择恰当方式进行弥补, 使数据完整。
3.对连续的数值型特征进行标准化,使得均值为0,方差为1。
4.对类别型的特征进行one-hot编码。
5.将需要转换成类别型数据的连续型数据进行二值化。
6.为防止过拟合或者其他原因,选择是否要将数据进行正则化。
7.在对数据进行初探之后发现效果不佳,可以尝试使用多项式方法,寻找非线性的关系。
8.根据实际问题分析是否需要对特征进行相应的函数转换
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)
很多时候我们用于模型训练的数据集包含许多的特征,这些特征要么是有冗余,要么是对结果的相关性很小;这时通过精心挑选一些"好"的特征来训练模型,既能减小模型训练时间,也能够提升模型性能。
函数 |
功能 |
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( ) |
特征选择 |
面对特征巨大的数据集,除了进行特征选择之外,我们还可以采取特征降维算法来减少特征数;特征降维于特征选择的区别在于:特征选择是从原始特征中挑选特征;而特征降维则是从原始特征中生成新的特征。很多人会有比较特征选择与特征降维优劣的心理,其实这种脱离实际问题的比较意义不大,我们要明白每一种算法都是有其擅长的领域。
函数 |
功能 |
decomposition.PCA( ) |
主成分分析 |
decomposition.KernelPCA( ) |
核主成分分析 |
decomposition.IncrementalPCA( ) |
增量主成分分析 |
decomposition.MiniBatchSparsePCA( ) |
小批量稀疏主成分分析 |
decomposition.SparsePCA( ) |
稀疏主成分分析 |
decomposition.FactorAnalysis( ) |
因子分析 |
decomposition.FastICA( ) |
独立成分分析的快速算法 |
decomposition.DictionaryLearning( ) |
字典学习 |
函数 |
功能 |
manifold.LocallyLinearEmbedding( ) |
局部非线性嵌入 |
manifold.Isomap( ) |
流形学习 |
manifold.MDS( ) |
多维标度法 |
manifold.t-SNE( ) |
t分布随机邻域嵌入 |
decomposition.NMF( ) |
非负矩阵分解 |
manifold.SpectralEmbedding( ) |
频谱嵌入非线性降维 |
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(朴素贝叶斯)
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(岭回归)
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( ) |
评估模型分类/回归/聚类模型 |
函数 |
功能 |
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曲线下面积 |
函数 |
功能 |
metrics.mean_squared_error( ) |
平均决定误差(预测值和观测值之间绝对误差的平均值) |
metrics.median_absolute_error( ) |
中值绝对误差(样本偏差的一种鲁棒性测量) |
metrics.r2_score( ) |
决定系数(判断回归方程拟合的程度) |
函数 |
功能 |
metrics.adjusted_rand_score( ) |
随机兰德调整指数(聚类结果与真实情况的吻合情况) |
metrics.silhouette_score( ) |
轮廓系数(评价聚类效果的好坏) |