机器学习笔记(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)
![]()

浙公网安备 33010602011771号