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()


浙公网安备 33010602011771号