前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一天-训练与测试模型

第一天-训练与测试模型

作者头像
小飞侠xp
发布2018-08-27 17:56:38
5490
发布2018-08-27 17:56:38
举报
在pandas 中加载数据

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

代码语言:javascript
复制
import pandas
data = pandas.read_csv("file_name.csv")
Numpy 数组

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

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

代码语言:javascript
复制
df['A']

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

代码语言:javascript
复制
df[['B', 'D']]

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

代码语言:javascript
复制
numpy.array(df)

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

代码语言:javascript
复制
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 中训练模型

定义分类器

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

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

代码语言:javascript
复制
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 分类器拟合此数据,如下所示:

代码语言:javascript
复制
 classifier = SVC()
 classifier.fit(X,y)

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

代码语言:javascript
复制
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:测试标签 该函数的调用如下所示:
代码语言:javascript
复制
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% 作为训练数据。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在pandas 中加载数据
  • Numpy 数组
  • 在scikit learn 中训练模型
  • 手动调整参数
  • 进行测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com