Scikit-learn中的学习模型构建:Python机器学习库

 
scikit-learn是一个开放源代码Python库,它使用统一的界面实现一系列机器学习,预处理,交叉验证和可视化算法。
 
scikit-learn的重要功能:
简单有效的数据挖掘和数据分析工具。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升,k均值等。
每个人都可以访问,并且可以在各种情况下重用。
构建在NumPy,SciPy和matplotlib的顶部。
开源,可商业使用– BSD许可证。
在本文中,我们将看到如何使用scikit-learn轻松构建机器学习模型。
 
安装:
 
Scikit学习要求:
 
NumPy
SciPy作为其依赖项。
在安装scikit-learn之前,请确保已安装NumPy和SciPy。安装完NumPy和SciPy后,安装scikit-learn的最简单方法是使用pip:
 
pip install -U scikit-learn
现在让我们开始建模过程。
 
步骤1:载入资料集
 
数据集不过是数据的集合。数据集通常具有两个主要组成部分:
 
功能:(也称为预测变量,输入或属性)它们只是我们数据的变量。它们可以不止一个,因此可以由特征矩阵表示(“ X”是表示特征矩阵的常用符号)。所有功能名称的列表称为功能名称。
响应:(也称为目标,标签或输出)这是取决于功能变量的输出变量。通常,我们只有一个响应列,并由响应向量表示(“ y”是表示响应向量的通用符号)。响应向量采用的所有可能值称为目标名称。
加载示例数据集: scikit-learn加载了一些示例数据集,例如用于分类的虹膜和数字数据集以及用于回归的波士顿房价数据集。
下面给出的是一个如何加载示例数据集的示例:
 
filter_none
编辑
play_arrow
 
亮度_4
# load the iris dataset as an example 
from sklearn.datasets import load_iris 
iris = load_iris() 
  
# store the feature matrix (X) and response vector (y) 
X = iris.data 
y = iris.target 
  
# store the feature and target names 
feature_names = iris.feature_names 
target_names = iris.target_names 
  
# printing features and target names of our dataset 
print("Feature names:", feature_names) 
print("Target names:", target_names) 
  
# X and y are numpy arrays 
print("\nType of X is:", type(X)) 
  
# printing first 5 input rows 
print("\nFirst 5 rows of X:\n", X[:5])
输出:
 
特征名称:['sepal length(cm)','sepal width(cm)',
                '花瓣长度(cm)','花瓣宽度(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库轻松加载和操作数据集。
 
要安装熊猫,请使用以下pip命令:
 
pip install pandas
在熊猫中,重要的数据类型是:
 
系列:系列是一维标记的数组,能够保存任何数据类型。
 
DataFrame:这是二维标记的数据结构,具有可能不同类型的列。您可以将其视为电子表格或SQL表或Series对象的字典。它通常是最常用的熊猫对象。
 
注意:以下示例中使用的CSV文件可以从此处下载:weather.csv
 
filter_none
编辑
play_arrow
 
亮度_4
import pandas as pd 
  
# reading csv file 
data = pd.read_csv('weather.csv') 
  
# shape of dataset 
print("Shape:", data.shape) 
  
# column names 
print("\nFeatures:", data.columns) 
  
# storing the feature matrix (X) and response vector (y) 
X = data[data.columns[:-1]] 
y = data[data.columns[-1]] 
  
# printing first 5 rows of feature matrix 
print("\nFeature matrix:\n", X.head()) 
  
# printing first 5 values of response vector 
print("\nResponse vector:\n", y.head())
输出:
 
形状:(14、5)
 
功能:索引([u'Outlook',u'Temperature',u'Humidity', 
                u'Windy',u'Play'],dtype ='object')
 
功能矩阵:
     展望温度湿度大风
0阴天高温高False
1个阴凉正常
2阴轻度高真
3阴热正常False
4多雨轻度高假
 
响应向量:
0是
1是
2是
3是
4是
名称:播放,dtype:对象
步骤2:分割资料集
 
所有机器学习模型的重要方面之一是确定其准确性。现在,为了确定其准确性,可以使用给定的数据集训练模型,然后使用该模型预测同一数据集的响应值,从而找到模型的准确性。
但是这种方法有一些缺陷,例如:
 
目标是根据样本外数据估计模型的可能性能。
最大限度地提高训练准确性会奖励过于复杂的模型,这些模型不一定能推广我们的模型。
不必要的复杂模型可能会过度拟合训练数据。
更好的选择是将数据分为两部分:第一部分用于训练我们的机器学习模型,第二部分用于测试我们的模型。
总结一下:
 
将数据集分为两部分:训练集和测试集。
在训练集上训练模型。
在测试集上测试模型,并评估我们的模型做得如何。
火车/测试拆分的优势:
 
可以在与用于训练的数据不同的数据上训练和测试模型。
测试数据集的响应值是已知的,因此可以评估预测
测试精度比样本外性能的训练精度更好。
考虑下面的示例:
 
filter_none
编辑
play_arrow
 
亮度_4
# load the iris dataset as an example 
from sklearn.datasets import load_iris 
iris = load_iris() 
  
# store the feature matrix (X) and response vector (y) 
X = iris.data 
y = iris.target 
  
# splitting X and y into training and testing sets 
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) 
  
# printing the shapes of the new X objects 
print(X_train.shape) 
print(X_test.shape) 
  
# printing the shapes of the new y objects 
print(y_train.shape) 
print(y_test.shape)
输出:
 
(90公升,4公升)
(60公升,4公升)
(90公升)
(60公升)
该train_test_split功能需要解释如下几个参数:
 
X,y:这是需要拆分的特征矩阵和响应向量。
test_size:测试数据与给定数据的比率。例如,为150行X设置test_size = 0.4会产生150 x 0.4 = 60行的测试数据。
random_state:如果您使用random_state = some_number,则可以保证拆分将始终相同。如果您想要可重复的结果,例如在测试文档中的一致性(以便每个人都可以看到相同的数字)时,这将很有用。
步骤3:训练模型
 
现在,是时候使用我们的数据集训练一些预测模型了。Scikit-learn提供了广泛的机器学习算法,这些算法具有统一的/一致的接口,用于拟合,预测准确性等。
 
下面给出的示例使用KNN(K个最近邻居)分类器。
 
注意:由于我们仅对算法的实现感兴趣,因此我们不会详细介绍算法的工作原理。
 
现在,考虑以下示例:
 
filter_none
编辑
play_arrow
 
亮度_4
# load the iris dataset as an example 
from sklearn.datasets import load_iris 
iris = load_iris() 
  
# store the feature matrix (X) and response vector (y) 
X = iris.data 
y = iris.target 
  
# splitting X and y into training and testing sets 
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) 
  
# training the model on training set 
from sklearn.neighbors import KNeighborsClassifier 
knn = KNeighborsClassifier(n_neighbors=3) 
knn.fit(X_train, y_train) 
  
# making predictions on the testing set 
y_pred = knn.predict(X_test) 
  
# comparing actual response values (y_test) with predicted response values (y_pred) 
from sklearn import metrics 
print("kNN model accuracy:", metrics.accuracy_score(y_test, y_pred)) 
  
# making prediction for out of sample data 
sample = [[3, 5, 4, 2], [2, 3, 5, 4]] 
preds = knn.predict(sample) 
pred_species = [iris.target_names[p] for p in preds] 
print("Predictions:", pred_species) 
  
# saving the model 
from sklearn.externals import joblib 
joblib.dump(knn, 'iris_knn.pkl')
输出:
 
kNN模型准确性:0.983333333333
预测:['versicolor','virginica']
上面的代码要注意的重点:
 
我们使用以下方法创建knn分类器对象:
knn = KNeighborsClassifier(n_neighbors=3)
使用X_train数据训练分类器。该过程称为拟合。我们传递特征矩阵和相应的响应向量。
knn.fit(X_train, y_train)
现在,我们需要在X_test数据上测试分类器。knn.predict方法用于此目的。它返回预测的响应向量y_pred。
y_pred = knn.predict(X_test)
现在,我们有兴趣通过比较y_test和y_pred来找到模型的准确性。这是使用指标模块的methods_score完成的:
print(metrics.accuracy_score(y_test, y_pred))
考虑当您希望模型对样本数据进行预测时的情况。然后,可以简单地以与传递任何特征矩阵相同的方式传递样本输入。
sample = [[3, 5, 4, 2], [2, 3, 5, 4]]
preds = knn.predict(sample)
如果您不希望一次又一次地训练分类器并使用预先训练的分类器,则可以使用joblib保存其分类器。您需要做的只是:
joblib.dump(knn, 'iris_knn.pkl')
如果要加载已经保存的分类器,请使用以下方法:
knn = joblib.load('iris_knn.pkl')
当我们接近本文结尾时,相对于其他一些机器学习库(例如R库),使用scikit-learn有一些好处:
 
机器学习模型的一致界面
提供许多调整参数,但具有合理的默认值
出色的文档
丰富的功能可用于伴随任务。
积极的社区发展与支持。
18215660330
179001057@qq.com