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)