Sklearn算法开发常用操作

Sklearn中文站点

Sklearn中文社区

Sklearn中文文档

内置数据集

Skearn中集成了部分数据集,包括部分小型数据集和大型数据集,用于算法开发、测试和验证。

小型玩具数据集:

函数 返回结果
load_boston([*, return_X_y]) 加载并返回波士顿房价数据集(回归)。
load_iris([*, return_X_y, as_frame]) 加载并返回鸢尾花数据集(分类)。
load_diabetes([*, return_X_y, as_frame]) 加载并返回糖尿病数据集(回归)。
load_digits([*, n_class, return_X_y, as_frame]) 加载并返回数字数据集(分类)。
load_linnerud([*, return_X_y, as_frame]) 加载并返回linnerud物理锻炼数据集。
load_wine([*, return_X_y, as_frame]) 加载并返回葡萄酒数据集(分类)。
load_breast_cancer([*, return_X_y, as_frame]) 加载并返回威斯康星州乳腺癌数据集(分类)。

大型现实世界数据集:

函数 说明
fetch_olivetti_faces([*, data_home, …]) 从AT&T(分类)中加载Olivetti人脸数据集。
fetch_20newsgroups([*, data_home, subset, …]) 从20个新闻组数据集中加载文件名和数据(分类)。
fetch_20newsgroups_vectorized([*, subset, …]) 加载20个新闻组数据集并将其矢量化为令牌计数(分类)。
fetch_lfw_people([*, data_home, funneled, …]) 将标签的面孔加载到Wild(LFW)人数据集中(分类)。
fetch_lfw_pairs([*, subset, data_home, …]) 在“Wild(LFW)”对数据集中加载标签的面部(分类)。
fetch_covtype([*, data_home, …]) 加载covertype(植被型数据集)数据集(分类)。
fetch_rcv1([*, data_home, subset, …]) 加载RCV1多标签数据集(分类)。
fetch_kddcup99([*, subset, data_home, …]) 加载kddcup99(网络入侵检测)数据集(分类)。
fetch_california_housing([*, data_home, …]) 加载加利福尼亚住房数据集(回归)。

手写数字数据集代码示例:

from sklearn.datasets import load_digits

digits = load_digits()
data = digits.data
label = digits.target

常用算法

Sklearn中包括分类、回归、聚类、降维、模型选择、预处理等算法。

常用模型及导入:

# SVM
from sklearn import svm
# AdaBoost
from sklearn.ensemble import AdaBoostClassifier
# GBDT
from sklearn.ensemble import GradientBoostingClassifier
# 多层感知机
from sklearn.neural_network import MLPClassifier
# ……

数据集划分

利用train_test_split划分训练集和测试集, 通过test_size调整训练/测试集比例。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split

digits = load_digits()
data = digits.data
label = digits.target
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.25)

交叉验证

将训练集划分为k个最小的子集,其中k-1个子集用于模型训练, 用剩余数据验证模型。

利用KFold划分数据集, 通过n_splits调整折数,n_splits最小为2。

from sklearn.datasets import load_digits
from sklearn.model_selection import KFold

digits = load_digits()
data = digits.data
label = digits.target

kf = KFold(n_splits=5)

for train_index, test_index in kf.split(data):

    x_train, x_test = data[train_index], data[test_index]
    y_train, y_test = label[train_index], label[test_index]

评价指标

分类模型

分类通常使用准确率、召回率、精确率等指标评价模型性能

from matplotlib import pyplot as plt
import seaborn as sns

# 准确率
from sklearn.metrics import accuracy_score
# 精确率
from sklearn.metrics import precision_score
# 召回率
from sklearn.metrics import recall_score
# 混淆矩阵
from sklearn.metrics import confusion_matrix

plt.rcParams['font.sans-serif'] = ['SimHei']  # (替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False  # (解决坐标轴负数的负号显示问题)
sns.set()

y_true = [1, 0, 0, 1, 0, 1, 0, 0, 1, 1]
y_pred = [0, 0, 1, 1, 0, 1, 0, 1, 1, 1]

matrix = confusion_matrix(y_true, y_pred, labels=[0,1]) # 输出混淆矩阵

accuracy = accuracy_score(y_true, y_pred) # 输出准确率

precision = precision_score(y_true, y_pred, average='macro') # 输出精确率

recall = recall_score(y_true, y_pred, average='macro') # 输出召回率

f, ax = plt.subplots()
sns.heatmap(matrix, annot=True, ax=ax)  # 画热力图
ax.set_title('matrix')  # 标题
ax.set_xlabel('Predict')  # x轴
ax.set_ylabel('True')  # y轴
plt.show()

matrix

posted @ 2022-05-02 12:28  昔日少年思无邪  阅读(139)  评论(0)    收藏  举报