使用 sklearn 中的 linear_model 感知器模块来分离点

Posted

技术标签:

【中文标题】使用 sklearn 中的 linear_model 感知器模块来分离点【英文标题】:Using the linear_model perceptron module from sklearn to separate points 【发布时间】:2021-12-13 13:52:15 【问题描述】:

我正在尝试将此 sklearn 模块用于二进制分类问题,并且我的数据显然是线性可分的。 我不明白为什么我的情节的绿色区域不包括五个红色圆圈。

.

我尝试将迭代次数参数(max_iter)从 100 更改为 10000,但没有任何区别。

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Perceptron

def learn_and_display_Perceptron(datafile):
   #taking data reading this from the above functions
   data = np.loadtxt(datafile)
   n,d = data.shape
   x = data[:,0:2]
   y = data[:,2]

   clf = Perceptron(max_iter=10000)
   clf.fit(x, y)
   sv = np.zeros(n,dtype=bool)  ## all False array
   notsv = np.logical_not(sv)   # all True array
   
       # Determine the x1- and x2- limits of the plot
   x1min = min(x[:,0]) - 1
   x1max = max(x[:,0]) + 1
   x2min = min(x[:,1]) - 1
   x2max = max(x[:,1]) + 1
   plt.xlim(x1min,x1max)
   plt.ylim(x2min,x2max)
   # Plot the data points, enlarging those that are support vectors
   plt.plot(x[(y==1)*notsv,0], x[(y==1)*notsv,1], 'ro')
   plt.plot(x[(y==1)*sv,0], x[(y==1)*sv,1], 'ro', markersize=10)
   plt.plot(x[(y==-1)*notsv,0], x[(y==-1)*notsv,1], 'k^')
   plt.plot(x[(y==-1)*sv,0], x[(y==-1)*sv,1], 'k^', markersize=10)
   # Construct a grid of points and evaluate classifier at each grid points
   grid_spacing = 0.05
   xx1, xx2 = np.meshgrid(np.arange(x1min, x1max, grid_spacing), np.arange(x2min, x2max, grid_spacing))
   grid = np.c_[xx1.ravel(), xx2.ravel()]
   Z = clf.predict(grid)
   # Quantize the values to -1, -0.5, 0, 0.5, 1 for display purposes
   for i in range(len(Z)):
       Z[i] = min(Z[i],1.0)
       Z[i] = max(Z[i],-1.0)
       if (Z[i] > 0.0) and (Z[i] < 1.0):
           Z[i] = 0.5
       if (Z[i] < 0.0) and (Z[i] > -1.0):
           Z[i] = -0.5
   # Show boundary and margin using a color plot
   Z = Z.reshape(xx1.shape)
   plt.pcolormesh(xx1, xx2, Z, cmap=plt.cm.PRGn, vmin=-2, vmax=2, shading='auto')
   plt.show()

我的数据文件,data_1.txt 可以在这里找到,https://github.com/bluetail14/MyCourserapractice/tree/main/Edx

我可以在我的代码中进行哪些更改来调整绿色/紫色边界线以包含五个红色圆圈?

【问题讨论】:

【参考方案1】:

不错的代码。你需要改变eta0的值,

clf = Perceptron(max_iter=10000, eta0=0.1)

【讨论】:

以上是关于使用 sklearn 中的 linear_model 感知器模块来分离点的主要内容,如果未能解决你的问题,请参考以下文章

Python - 分类套索 sklearn - 如何预测类

修复我的脚本中的浮动错误(需要帮助)Python

处理 sklearn.tree.DecisionTreeClassifier 中的连续变量

是否可以使用不同的数据集作为 AdaBoostRegressor (sklearn) 中的预测输入?

sklearn 中的 AttributeError

sklearn中的交叉验证+决策树