sklearn入门基础

参考官方文档:https://scikit-learn.org/stable/getting_started.html

Fitting and predicting: estimator basics(拟合和预测:估计器基础)

Scikit-learn内置了数十种机器学习算法和模型,这些算法和模型叫做估计器。每一个估计器都可以使用其拟合方法来拟合某些数据。下面是我们使用随机森林模型拟合一些数据的例子:

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
X = [[ 1,  2,  3],  # 2 samples, 3 features
     [11, 12, 13]]
y = [0, 1]  # classes of each sample
clf.fit(X, y)

fit方法通常接收两个参数:

  • 样本矩阵X。X的大小通常为(n_samples,n_features),这意味着样本表示为行,特征表示为列。
  • 目标值y是用于回归任务的实数,或者是用于分类的整数(或任何其他离散值集)。对于无监督学习任务,无需指定y。y通常是1d数组,其中第i个条目对应于X的第i个样本(行)的目标。
    x,y通常希望是numpy数组格式(因为sklearn是基于numpy开发的包),或者等价类似于数组类型(pandas.DataFrame)。一些评估器也可以使用稀疏矩阵类型。一旦估计器拟合过数据了,就可以直接拿来做预测而无需重复训练。
clf.predict(X)  # predict classes of the training data

clf.predict([[4, 5, 6], [14, 15, 16]])  # predict classes of new data

Transformers and pre-processors(数据变换器和预处理器)

机器学习工作流通常包含许多不同部分,一个传统的流程是包含一个数据预处理步骤(数据变换、缺失值填补等)和一个最后的预测器。
在sklearn中,不同的估计器对象有着相同的数据变换API(事实上他们都是继承于BaseEstimator类)。变换器有transform方法(类似于predict方法)用来输出一个尺寸相同的变换后的矩阵。

from sklearn.preprocessing import StandardScaler
X = [[0, 15],
     [1, -10]]
StandardScaler().fit(X).transform(X)

有时候你想对不同的特征使用不同的数据变换方法,你可以使用 ColumnTransformer方法。

Pipelines: chaining pre-processors and estimators(管道:链接预处理器和估计器)

我们可以使用管道链接数据变换器和预测器,管道像传统的预测器一样提供相同的fit和predict方法。使用管道可以使我们变得代码简洁易懂,并且可以避免我们犯数据泄露的错误。

from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# create a pipeline object
pipe = make_pipeline(
    StandardScaler(),
    LogisticRegression(random_state=0)
)

# load the iris dataset and split it into train and test sets
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

# fit the whole pipeline
pipe.fit(X_train, y_train)


# we can now use it like any other estimator
accuracy_score(pipe.predict(X_test), y_test)

Model evaluation(模型评估)

训练数据并不代表我们的模型能够在未知数据上表现良好,所以我们需要评估模型。我们使用train_test_split方法划分训练集测试集,除此之外,sklearn还提供了一些其他的工具进行模型评估,特别是cross-validation(交叉验证)。我们这里简单演示一下使用五折交叉验证的流程。

from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_validate

X, y = make_regression(n_samples=1000, random_state=0)
lr = LinearRegression()

result = cross_validate(lr, X, y)  # defaults to 5-fold CV
result['test_score']  # r_squared score is high because dataset is easy

Automatic parameter searches(自动参数搜索)

所有估计器都有可以调整的参数(在文献中通常称为超参数)。估计器的泛化能力通常主要取决于几个参数。例如RandomForestRegressor具有一个n_estimators参数,该参数确定林中树木的数量,以及max_depth参数,该参数确定每棵树的最大深度。通常,不清楚这些参数的确切值是多少,因为它们取决于手头的数据。Scikit-learn提供了自动查找最佳参数组合的工具(通过交叉验证)。在以下示例中,我们使用RandomizedSearchCV对象在随机森林的参数空间中进行随机搜索。搜索结束后,RandomizedSearchCV的表现类似于已配备最佳参数集的RandomForestRegressor。

from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split
from scipy.stats import randint

X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

# define the parameter space that will be searched over
param_distributions = {'n_estimators': randint(1, 5),
                       'max_depth': randint(5, 10)}

# now create a searchCV object and fit it to the data
search = RandomizedSearchCV(estimator=RandomForestRegressor(random_state=0),
                            n_iter=5,
                            param_distributions=param_distributions,
                            random_state=0)
search.fit(X_train, y_train)
search.best_params_
# the search object now acts like a normal random forest estimator
# with max_depth=9 and n_estimators=4
search.score(X_test, y_test)

实际上,您几乎总是想在管道上而不是单个估计器上进行搜索。主要原因之一是,如果在不使用流水线的情况下对整个数据集应用预处理步骤,然后执行任何类型的交叉验证,那么您将打破训练和测试数据之间独立性的基本假设。实际上,由于您是使用整个数据集对数据进行预处理的,因此有关训练集的一些信息可用于训练集。这将导致高估估计器的泛化能力。使用管道进行交叉验证和搜索将在很大程度上避免您遇到这个常见的陷阱。

sklearn 常用方法

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值