作者 |Rebecca Vickery
编译 |VK
起源 |Towards Datas Science
scikit-learn 是 2007 年作为 Googles Summer 代码我的项目开发的,当初被宽泛认为是最风行的机器学习 Python 库。
为什么这个库被认为是机器学习我的项目的最佳抉择之一,特地是在生产零碎中,有许多起因。这些包含但不限于以下内容。
- 它对库的开发有很高的反对和严格的治理,这意味着它是一个十分强壮的工具。
- 有一个清晰、统一的代码格调,确保机器学习代码易于了解和可复制,同时也大大降低了编写机器学习模型的门槛。
- 它受到第三方工具的广泛支持,因而能够丰盛性能以适应各种用例。
如果你正在学习机器学习,那么 Scikit learn 可能是开始学习的最佳库。它的简略性意味着它相当容易把握,通过学习如何应用它,你还能够很好地把握典型的机器学习工作流中的关键步骤。
上面这篇文章是对该工具的初学者敌对的介绍,应该能让你对开发一个简略的机器学习模型有足够的理解。
要装置 Scikit 的最新版本,请运行以下命令。
pip install scikit-learn
本文中的代码示例运行在能够间接从 Scikit-learn api 导入的经典 wine 数据集上。
from sklearn.datasets import load_wine
X,y = load_wine(return_X_y=True)
Estimators
Scitkit 学习库提供了大量的预构建算法来执行有监督和无监督的机器学习。它们通常被称为 Estimators。
你为你的项目选择的 Estimators 将取决于你领有的数据集和你试图解决的问题。Scikit 学习文档提供了如下所示的图表,帮忙你确定哪种算法适宜你的工作。
Scikit learn 之所以能如此间接地应用,是因为无论你应用的模型或算法是什么,用于模型训练和预测的代码构造都是雷同的。
为了阐明这一点,让咱们通过一个例子。
假如你正在解决一个回归问题,并心愿训练一个线性回归算法,并应用失去的模型进行预测。应用 Scikit learn 的第一步是调用 logistic 回归 Estimator 并将其另存为对象。上面的示例调用该算法并将其保留为一个名为 lr 的对象。
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
下一步是依据一些训练数据拟合模型。这是应用 fit() 办法执行的。咱们在特色和指标数据调用 lr.fit(),并将生成的模型另存为名为 model 的对象。在上面的例子中,我也用 train 办法将数据集宰割成测试集。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
model = lr.fit(X_train, y_train)
下一步,咱们应用模型和 predict() 办法来预测以前看不到的数据。
predictions = model.predict(X_test)
如果咱们当初要应用 Scitkit learn 执行不同的工作,比如说,咱们想训练一个随机森林分类器。代码看起来十分类似,并且具备雷同的步骤数。
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier()
rf_model = rf.fit(X_train, y_train)
rf_predictions = rf_model.predict(X_test)
这种统一的代码构造使得开发机器学习模型十分间接,而且生成的代码具备很高的可读性和可重复性。
预处理
在大多数理论的机器学习我的项目中,你应用的数据不肯定筹备好训练模型。你很可能首先须要执行一些数据预处理和转换步骤,例如解决缺失值、将类别数据转换为数值或利用特色缩放。
scikitlearn 有内置的办法来执行这些预处理步骤。例如,SimpleImputer() 应用你抉择的办法填充短少的值。
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
X_train_clean = imputer.fit(X_train)
Scikit 学习文档在这里列出了数据预处理的残缺选项。
评估
一旦一个模型被训练过,你须要掂量这个模型在预测新数据方面有多好。此步骤称为模型评估,你抉择的度量将由你尝试解决的工作确定。例如,通常在回归问题中,你能够抉择 RMSE,而对于分类,你能够抉择 F1 分数。
所有 Estimator 都蕴含一个 score() 办法,该办法返回与所执行的机器学习工作最相干的默认度量。
Scikit learn 还提供了一组度量函数,这些函数为模型提供了更具体的评估。例如,对于分类工作,库有一个分类报告,它提供精度、召回率、F1 分数和总体准确度。
分类报告代码和输入如下所示。
from sklearn.metrics import classification_report
print(classification_report(rf_predictions, y_test))
模型优化
Scikit 学习库中的所有 Estimator 都蕴含一系列参数,其中有多个选项。为特定算法抉择的值将影响最终模型的性能。例如,应用 RandomForestClassifier,能够将树的最大深度设置为可能的任何值,并且依据你的数据和工作,此参数的不同值将产生不同的后果。
这种尝试不同参数组合以找到最佳组合的过程称为超参数优化。
Scikit learn 提供了两个工具来主动执行此工作,GridSearchCV 实现了一种称为穷举网格搜寻的技术,RandomizedSearchCV 执行随机参数优化。
上面的示例应用 GridSearchCV 为 RandomForestClassifier 查找最佳参数。输入显示在代码上面。
param_grid = {'n_estimators': [200, 500],
'max_features': ['auto', 'sqrt', 'log2'],
'max_depth' : [4,5,6,7,8],
'criterion' :['gini', 'entropy']
}
from sklearn.model_selection import GridSearchCV
CV = GridSearchCV(rf, param_grid, n_jobs= 1)
CV.fit(X_train, y_train)
print(CV.best_params_)
print(CV.best_score_)
管道
Scikit-learn 包以管道的模式提供了更不便的代码封装模式。此工具使所有预处理工作都能够与分类器步骤链接在一起,因而只需对单个管道对象调用 fit() 或 predict() 即可执行工作流中的所有步骤。
这使得代码具备很高的可读性,并缩小了机器学习工作流中的反复步骤。
为了创立管道,咱们首先在上面的代码中定义我称为 pipe 的对象中的步骤。而后咱们能够简略地调用这个对象的 fit 来训练模型。管道对象还能够用于对新数据进行预测。
from sklearn.pipeline import Pipeline
pipe = Pipeline([('imputer', SimpleImputer()), ('rf', RandomForestClassifier())])
pipeline_model = pipe.fit(X_train, y_train)
pipeline_model.score(X_test, y_test)
原文链接:https://towardsdatascience.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/