第一天-训练与测试模型

在pandas 中加载数据

要打开此数据集(csv 文件),我们将在 Pandas 中使用命令read_csv

import pandas
data = pandas.read_csv("file_name.csv")
Numpy 数组

我们已经在 Pandas 中加载数据,现在需要将输入和输出拆分为 numpy 数组,以便在 scikit-learn 中应用分类器。方法如下:假设有个 pandas 数据框 df,如下所示,有四个列,分别标为 A、B、C、D:



如果我们想要提取列 A,则执行以下操作:

df['A']

现在,如果我们希望获取更多的列(columns),则执行以下操作:

df[['B', 'D']]

最后,我们将这些 pandas DataFrames 转变为 NumPy 数组。这个操作的命令语句很简单:

numpy.array(df)

现在你自己试试!使用我们之前在 pandas 中加载的同一数据框,将其拆分为特征 X 和标签 y,并将它们转变为NumPy数组。

import pandas as pd
import numpy as np

data = pd.read_csv("data.csv")

# TODO: Separate the features and the labels into arrays called X and y

X = np.array(data[['x1', 'x2']])
y = np.array(data['y'])
在scikit learn 中训练模型

定义分类器

  • 逻辑回归
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
  • 神经网络
from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier()
  • 决策树
from sklearn.ensemble import GradientBoostingClassifier
classifier = GradientBoostingClassifier()
  • 支持向量机
from sklearn.svm import SVC
classifier = SVC()

示例
我们从头到尾地看看如何读取数据和训练分类器。假设使用上一部分的 X 和 y。然后,以下命令将训练逻辑回归分类器:
你的目标是使用上述其中一个分类器(逻辑回归、决策树或支持向量机,抱歉,此版本的 sklearn 依然无法使用神经网络,但是我们即将更新!),看看哪个分类器能够更好地拟合数据。点击测试答案看看分类器的图形输出,然后在下面的练习中,输入你认为能更好地拟合数据的分类器!

import pandas
import numpy as np
import matplotlib.pyplot as plt
# Read the data
data = pandas.read_csv('data.csv')
# Split the data into X and y
X = numpy.array(data[['x1', 'x2']])
y = numpy.array(data['y'])
# import statements for the classification algorithms
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
#决策边界
def plot_decision_boundary(pred_func):
 
    # 设定最大最小值,附加一点点边缘填充
    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    h = 0.01
 
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
 
    # 用预测函数预测一下
    Z = pred_func(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
 
    # 然后画出图
    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)
# Logistic Regression Classifier
classifier = LogisticRegression()
classifier.fit(X,y)
plot_decision_boundary(lambda x: classifier.predict(x))
plt.show()
# Decision Tree Classifier
classifier = DecisionTreeClassifier()
classifier.fit(X,y)
plot_decision_boundary(lambda x: classifier.predict(x))
plt.show()
# Support Vector Machine Classifier
classifier = SVC()
classifier.fit(X,y)
plot_decision_boundary(lambda x: classifier.predict(x))
plt.show()
逻辑回归

决策树

SVM
手动调整参数

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



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

 classifier = SVC()
 classifier.fit(X,y)

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

classifier = SVC(kernel = 'poly', degree = 2)
  • kernel: linear (线性), poly(多项式), rbf(高斯核)
  • degree(整型):多项式内核的次数(如果选择了多项式内核)
  • gamma (浮点型):γ 参数
  • C(浮点型):C 参数
进行测试

使用 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% 作为训练数据。

你可能感兴趣的:(第一天-训练与测试模型)