📅  最后修改于: 2020-04-26 06:17:16             🧑  作者: Mango
scikit-learn是一个开放源代码Python库,它使用统一的界面实现一系列机器学习,预处理,交叉验证和可视化算法。
scikit-learn的重要功能:
在本文中,我们将了解如何使用scikit-learn轻松构建机器学习模型。
安装:
Scikit要求:
在安装scikit-learn之前,请确保已安装NumPy和SciPy。一旦您可以正常安装NumPy和SciPy,安装scikit-learn的最简单方法就是使用pip:
pip install -U scikit-learn
现在让我们开始建模过程。
步骤1:载入资料集
数据集不过是数据的集合。数据集通常具有两个主要组成部分:
加载示例数据集: scikit-learn加载了一些示例数据集,例如用于分类的虹膜和数字数据集以及用于回归的波士顿房价数据集。
下面给出的是一个如何加载示例数据集的示例:
# 以加载虹膜数据集为例
from sklearn.datasets import load_iris
iris = load_iris()
# 存储特征矩阵(X)和响应向量(y)
X = iris.data
y = iris.target
# 存储特征和目标名称
feature_names = iris.feature_names
target_names = iris.target_names
# 打印数据集的特征和目标名称
print("特征名称:", feature_names)
print("目标名称:", target_names)
# X和y是numpy数组
print("\nX的类型是:", type(X))
# 打印前5个输入行
print("\nX的前5行:\n", X[:5])
输出:
特征名称: ['sepal length (cm)','sepal width (cm)',
'petal length (cm)','petal width (cm)']
目标名称: ['setosa' 'versicolor' 'virginica']
X的类型是:
X的前5行:
[[ 5.1 3.5 1.4 0.2]
[ 4.9 3. 1.4 0.2]
[ 4.7 3.2 1.3 0.2]
[ 4.6 3.1 1.5 0.2]
[ 5. 3.6 1.4 0.2]]
加载外部数据集:现在,考虑要加载外部数据集的情况。为此,我们可以使用pandas库轻松加载和操作数据集。
要安装pandas,请使用以下pip命令:
pip install pandas
在pandas中,重要的数据类型是:
Series:系列Series是一维标记的数组,能够保存任何数据类型。
数据框DataFrame:这是二维标记的数据结构,具有可能不同类型的列。您可以将其视为电子表格或SQL表,或Series对象的字典。它通常是最常用的pandas对象。
注意:以下示例中使用的CSV文件可以从此处下载:weather.csv
import pandas as pd
# 读取csv文件
data = pd.read_csv('weather.csv')
# 数据集的形状
print("形状:", data.shape)
# 列名
print("\n特征:", data.columns)
# 存储特征矩阵(X)和响应向量(y)
X = data[data.columns[:-1]]
y = data[data.columns[-1]]
# 打印特征矩阵的前5行
print("\n特征矩阵:\n", X.head())
# 打印响应向量的前5个值
print("\n响应向量:\n", y.head())
输出:
形状: (14, 5)
特征: Index([u'Outlook', u'Temperature', u'Humidity',
u'Windy', u'Play'], dtype='object')
特征矩阵:
Outlook Temperature Humidity Windy
0 overcast hot high False
1 overcast cool normal True
2 overcast mild high True
3 overcast hot normal False
4 rainy mild high False
响应向量:
0 yes
1 yes
2 yes
3 yes
4 yes
Name: Play, dtype: object
步骤2:分割资料集
所有机器学习模型的重要方面之一是确定其准确性。现在,为了确定其准确性,可以使用给定的数据集训练模型,然后使用该模型预测同一数据集的响应值,从而找到模型的准确性。
但是这种方法有一些缺陷,例如:
更好的选择是将数据分为两部分:第一部分用于训练我们的机器学习模型,第二部分用于测试我们的模型。
总结一下:
训练/测试拆分的优势:
考虑下面的示例:
# 以加载虹膜数据集为例
from sklearn.datasets import load_iris
iris = load_iris()
# 存储特征矩阵(X)和响应向量(y)
X = iris.data
y = iris.target
# 将X和y分为训练和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
# 打印新的X对象的形状
print(X_train.shape)
print(X_test.shape)
# 打印新y对象的形状
print(y_train.shape)
print(y_test.shape)
输出:
(90L, 4L)
(60L, 4L)
(90L,)
(60L,)
该train_test_split函数需要解释如下几个参数:
步骤3:训练模型
现在,是时候使用我们的数据集训练一些预测模型了。Scikit-learn提供了广泛的机器学习算法,这些算法具有统一的/一致的接口以进行拟合,预测准确性等。
下面给出的示例使用KNN(K个最近邻)分类器。
注意:由于我们仅对算法的实现感兴趣,因此我们不会详细介绍算法的工作原理。
现在,考虑以下示例:
# 以加载虹膜数据集为例
from sklearn.datasets import load_iris
iris = load_iris()
# 存储特征矩阵(X)和响应向量(y)
X = iris.data
y = iris.target
# 将X和y分为训练和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
# 在训练集上训练模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# 对测试集进行预测
y_pred = knn.predict(X_test)
# 比较实际响应值(y_test)与预测响应值(y_pred)
from sklearn import metrics
print("kNN模型的准确性:", metrics.accuracy_score(y_test, y_pred))
# 对样本数据进行预测
sample = [[3, 5, 4, 2], [2, 3, 5, 4]]
preds = knn.predict(sample)
pred_species = [iris.target_names[p] for p in preds]
print("预测:", pred_species)
# 保存模型
from sklearn.externals import joblib
joblib.dump(knn, 'iris_knn.pkl')
输出:
kNN模型的准确性: 0.983333333333
预测: ['versicolor', 'virginica']
上面的代码要注意的重点:
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(metrics.accuracy_score(y_test, y_pred))
sample = [[3, 5, 4, 2], [2, 3, 5, 4]]
preds = knn.predict(sample)
joblib.dump(knn, 'iris_knn.pkl')
knn = joblib.load('iris_knn.pkl')
当我们接近本文结尾时,相对于其他一些机器学习库(例如R库),使用scikit-learn有一些好处: