一、Scikit-learn概述
基于NumPy、SciPy和Matplotlib的开源机器学习包,封装了一系列数据预处理、机器学习算法、模型选择等工具。
简称sklearn,支持包括分类(classification)、回归(regression)、降维(dimensionality reduction)和聚类(clustering)四大机器学习算法,还包括特征提取、数据处理、模型评估三大模块。
二、Scikit-learn主要用法
符号标记:
X_train ------ 训练数据
X_test ------ 测试数据
X ------ 完整数据
y_train ------ 训练集标签
y_test ------ 测试集标签
y ------ 数据标签
加载数据集:
sklearn.datasets模块提供了一系列数据集,包括波士顿房价、Olivetti人脸、MNIST数据集
from sklearn.datasets import load_iris
iris = load_iris()
# 获得特征向量
X = iris.data
# 获得样本label
y = iris.target
数据划分:
from sklearn.model_selection import train_test_split
# 将完整的数据集的70%作为训练集,30%作为测试集,并使得测试集和训练集中各类别数据的比例与原始数据集比例一致(stratify分层策略),另外可以设置shuffle=True提前打乱数据
X_train,X_test,y_train,y_test = train_test_split(X,y,ramdom_state=12,stratify=y,test_size=0.3)
数据预处理:
# 数据标准化
from sklearn.preprocessing import StandardScaler
# 构造转换器实例
scaler = StandardScaler()
# 拟合及转换
scaler.fit_transform(X_train)
最小最大标准化 ------ MinMaxScaler
One-Hot编码 ------ OneHotEncoder
归一化 ------ Normalizer
二值化(单个特征转换) ------ Binarizer
标签编码 ------ LabelEncoder
缺失值填补 ------ Imputer
多项式特征生成 ------ PolynomialFeatures
特征选择:
from sklearn import feature_selection as fs
fs.SelectKBest(score_func, k)
# 过滤式(Filter),保留得分排名前k的特征(top k方式)
fs.RFECV(estimator, scoring="r2")
# 封装式(Wrapper),结合交叉验证的递归特征消除法,自动选择最优特征个数
fs.SelectFromModel(estimator)
# 嵌入式(Embedded)
监督学习算法-回归:
from sklearn.linear_model import LinearRegression
# 构建模型实例
lr = LinearRegression(normalize=True)
# 训练模型
lr.fit(X_train,y_train)
# 做出预测
y_pred = lr.predict(X_test)
监督学习算法-分类:
# 使用决策树分类算法解决二分类问题
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=5)
clf.fit(X_train,y_train)
y_pred = clf.predict(X_test)
# y_prob 为每个样本预测为0和1类的概率
y_prob = clf.predict_proba(X_test)
逻辑回归 ------ linear_model.LogisticRegression
支持向量机 ------ svm.SVC
朴素贝叶斯 ------ naive_bayes.GaussianNB
K近邻 ------ neighbors.NearestNeighbors
监督学习算法-集成学习:
# sklearn.ensemble模块包含了一系列基于集成思想的分类、回归和离群值检测方法
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=20) clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
y_prob = clf.predict_proba(X_test)
# 基于梯度提升
ensemble.AdaBoostClassifier
ensemble.AdaBoostRegressor
ensemble.GradientBoostingClassifier
ensemble.GradientBoostingRegressor
无监督学习算法:
# sklearn.cluster模块包含了一系列无监督聚类算法
from sklearn.cluster import KMeans
# 构建聚类实例
kmeans = KMeans(n_clusters=3, random_state=0)
# 拟合
kmeans.fit(X_train)
# 预测
kmeans.predict(X_test)
DBSCAN ------ cluster.DBSCAN
层次聚类 ------ cluster.AgglomerativeClustering
谱聚类 ------ cluster.SpectralClustering
评价指标:
# sklearn.metrics模块包含了一系列用于评价模型的评分函数、损失函 数以及成对数据的距离度量函数
from sklearn.metrics import accuracy_score
# 对于测试集而言,y_test即是y_true,大部分函数都必须包含真实值y_true和预测值y_pred
accuracy_score(y_true, y_pred)
# 回归模型评价
metrics.mean_absolute_error() ------ 平均绝对误差MAE
metrics.mean_squared_error() ------ 均方误差MSE
metrics.r2_score() ------ 决定系数R2
# 分类模型评价
metrics.accuracy_score() ------ 准确率
metrics.precision_score() ------ 精确率
metrics.f1_score() ------ F1 值
metrics.log_loss() ------ 对数损失或交叉熵损失
metrics.confusion_matrix ------ 混淆矩阵
metrics.classification_report ------ 含多种评价的分类报告
交叉验证:
from sklearn.model_selection import cross_val_score
# 使用5折交叉验证对决策树模型进行评估
clf = DecisionTreeClassifier(max_depth=5)
# sklearn提供了部分带交叉验证功能的模型类如LassoCV、LogisticRegressionCV等,这些类包含cv参数
# 使用的评分函数为F1值
scores = cross_val_score(clf, X_train, y_train, cv=5, scoring='f1_weighted')
超参数调优:
# 网格搜索
# 在参数网格上进行穷举搜索,方法简单但是搜索速度慢(超参数较多时),且不容易找到参数空间中的局部最优
from sklearn.model_selection import GridSearchCV
from sklearn import svm
svc = svm.SVC()
params = {
'kernel':['linear', 'rbf'],
'C':[1, 10]
}
grid_search = GridSearchCV(svc, params, cv=5)
grid_search.fit(X_train, y_train)
grid_search.best_params_
# 随机搜索
# 在参数子空间中进行随机搜索,选取空间中的100个点进行建模(可从scipy.stats常见分布如正态分布norm、均匀分布uniform中随机采样得到),时间耗费较少,更容易找到局部最优
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
svc = svm.SVC()
param_dist = {
'kernel':['linear', 'rbf'],
'C':randint(1, 20)
}
random_search = RandomizedSearchCV(svc, param_dist, n_iter=10)
random_search.fit(X_train, y_train)
random_search.best_params_
补充内容:
https://www.cnblogs.com/lianyingteng/p/7811126.html