机器学习笔记(2) —— 训练与测试文档

在 scikit learn 中训练模型

在此部分,我们依然使用在前几个部分使用的数据集。

图片

我们知道机器学习领域的一些最重要的分类算法,包括以下算法:

  • 逻辑回归
  • 神经网络
  • 决策树
  • 支持向量机

现在我们将有机会在实际数据中运用它们!在 sklearn 中非常简单,只需定义分类器,然后使用下面这行代码使分类器与数据拟合(称为X,y):

classifier.fit(X,y)

以下是我们定义的主分类器,以及必须导入的文件包:

逻辑回归

fromsklearn.linear_model import LogisticRegression

classifier = LogisticRegression()

神经网络

(注意:仅适用于 0.18 或更高版本的 scikit-learn)

fromsklearn.neural_network import MLPClassifier

classifier = MLPClassifier()

决策树

fromsklearn.tree import DecisionTreeClassifier

classifier = DecisionTreeClassifier()

支持向量机

fromsklearn.svm import SVC

classifier = SVC()

示例:逻辑回归

我们从头到尾地看看如何读取数据和训练分类器。假设使用上一部分的 X 和 y。然后,以下命令将训练逻辑回归分类器:

fromsklearn.linear_model import LogisticRegression

classifier = LogisticRegression()

classifier.fit(X,y)

得出以下界线:

图片

调整参数

似乎上次的 3 个算法当中,有 2 个效果不错,对吧?以下是你可能会获得的图形:

图片

似乎逻辑回归的效果不太理想,因为它是线性算法。决策树能够很好地划分数据(问题:决策树的界限区域为何是那样的?),SVM 的效果非常棒。现在我们试试稍微复杂些的数据集,如下所示:

图片

我们试着用 SVM 分类器拟合此数据,如下所示:

classifier= SVC()

classifier.fit(X,y)

如果输入上述内容,将失败(你将有机会在下面试试)。但是,也许我们没有充分利用 SVM 分类器。首先,我们使用了正确的内核吗?例如,我们可以使用 2 次多项式内容,如下所示:

classifier = SVC(kernel= 'poly', degree =2)

classifier = SVC(kernel = 'rbf', gamma = 200, C = 0.5)

我们自己试试,看看这些参数。稍后我们将深入了解这些参数,但是你可以设定以下这些值(我们稍后将学习这些参数。暂时可以直接使用它们。):

  • kernel:linear(线性),poly(多项式),rbf(高斯核)
  • degree:多项式内核的次数(如果选择了多项式内核)
  • gamma :γ参数,用于配置对特征向量差异的敏感度
  • C:C参数,容错程度,C越大边界越复杂,会导致过拟合

在 sklearn 中进行测试

使用 sklearn 可以轻松地将数据集拆分为训练数据和测试数据。我们只需输入train_test_split命令。该函数获得输入X和y,然后返回四项内容:

  • X_train:训练输入数据
  • X_test:测试输入数据
  • y_train:训练标签
  • y_test:测试标签

该函数的调用如下所示:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test= train_test_split(X, y,test_size =0.25)

最后一个参数test_size是我们想用作测试数据的点所占百分比。在上述调用中,我们使用 25% 的数据作为测试数据,75% 作为训练数据。

我们练习下!我们将再次使用上一部分的数据集:

图片

在下面的测验中,使用train_test_split函数将数据集拆分为训练集和测试集。测试集的大小必须是数据总大小的20%。训练集称为X_train和y_train,测试集称为X_test和y_test。

# Reading the csv file
import pandas as pd
data = pd.read_csv("data.csv")# Splitting the data into X and y
import numpy as np
X = np.array(data[['x1', 'x2']])
y = np.array(data['y'])# Import statement for train_test_split
from sklearn.cross_validation import train_test_split# TODO: Use the train_test_split function to split the data into
# training and testing sets.
# The size of the testing set should be 20% of the total size of the data.
# Your output should contain 4 objects.
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)

图片

posted @ 2020-06-24 15:47  CQCx64  阅读(302)  评论(0)    收藏  举报