机器学习事例

sklearn(四) Logitstic线性分类

2018-02-06  本文已影响116人  海街diary

1.生成样本

和之前线性回归一样,我们采用sklearn的datasets模块的make_classification生成样本。

X, y = datasets.make_classification(
    n_samples=100,
    n_features=2,
    n_informative=2,
    n_redundant=0,
    n_classes=2,
    random_state=1
)

利用matplot画出散点图,进行初步观察。

训练样本

2.建立回归分类器

在linear_model中选择LogisticRegression,主要参数有惩罚项(默认是L2-norm),惩罚因子C默认为1。

classifier = linear_model.LogisticRegression(C=1)
classifier.fit(X, y)
# 预测
# classfier.predict(X)

3.画出决策边界

下面我们要定义一个plot_classifier函数,用于画出边界。

def plot_classifier(classifier, X, y):
    x_min, x_max = min(X[:, 0]) / 1.2, max(X[:, 0]) * 1.2
    y_min, y_max = min(X[:, 0]) / 1.2, max(X[:, 1]) * 1.2

    # 制作网格
    step_size = (x_max - x_min + y_max - y_min) / 2000
    # print((x_max - x_min)/step_size)  = 865
    # print((y_max - y_min)/step_size)  = 1135
    x_values, y_values = np.meshgrid(np.arange(x_min, x_max, step_size),
                                     np.arange(y_min, y_max, step_size))

    # 分类结果
    # np.c_进行x, y的合并
    # x_values.ravel()和y_values.ravel()用于将数组降到1维
    mesh_output = classifier.predict(np.c_[x_values.ravel(), y_values.ravel()])
    # print(mesh_output)
    mesh_output = mesh_output.reshape(x_values.shape)   # (1135, 866)

    # 画图
    plt.figure()
    plt.pcolormesh(x_values, y_values, mesh_output, cmap=plt.cm.rainbow)
    plt.scatter(X[:, 0], X[:, 1], edgecolors='black', c=y)
    plt.xlim(x_values.min(), x_values.max())
    plt.ylim(y_values.min(), y_values.max())
    plt.show()
 
plot_classifier(classifier, X, y)

效果是下面这样的。

预测结果(C=1)

4.模型修改

这次修改呢,是个不好的修改。我们修改惩罚因子C为0.001。 C越小,意味着惩罚越大。

C: 1, accuracy:0.8600000143051147
C: 0.001, accuracy:0.8500000238418579

可以看到增大惩罚因子,模型效果反而不好了。可视化解释如下。

模型修改(C=0.001)
上一篇下一篇

猜你喜欢

热点阅读