参数获取
# 截取两个维度的参数
x = iris['data'][:,(2,3)]
# 目标值
y = (iris['target'] == 2).astype(np.int32)
训练模型
# 训练逻辑回归模型
from sklearn.linear_model import LogisticRegression
log_res = LogisticRegression()
log_res.fit(x,y)
额外:如何构建一个点阵
我们选取了两个x参数和一个目标值y,即形成的结果需要有三个轴,对于x0,x1所在的平面上选取到一个点,可以找到与之对应的y值。所以为了绘制y轴上的图像(我们最终使用x0ox1平面上的等高线投影来代表y),我们需要找到众多的点(x0,x1)
可以使用如下的方式来获取这样的(x0,x1)点阵
x0,x1 = np.meshgrid(np.linspace(1,2,2).reshape(-1,1),
np.linspace(10,12,3).reshape(-1,1))
# 构建列相同数据
print('x0',x0)
print()
# 构建行相同数据
print('x1',x1)
print()
# 拉长数据后拼接
print(np.c_[x0.ravel(),x1.ravel()])
我们可以发现meshgrid
返回的第一个值x0就是一个根据入参1得到的列相同矩阵,
返回的第二个值x1就是一个根据入参2得到的行相同矩阵
当我们使用ravel函数把矩阵拉长(平铺成一维数组),再拼接起来,就可以得到一个点阵
选取x0ox1面上的点以及对应的预测值
x0,x1 = np.meshgrid(np.linspace(2.9,7,500).reshape(-1,1),
np.linspace(0.8,2.7,200).reshape(-1,1))
x_test = np.c_[x0.ravel(),x1.ravel()]
y_proba = log_res.predict_proba(x_test)
绘制概率等高线图
plt.figure(figsize=(10,4))
# Not Virginica的参数用蓝色方块表示
plt.plot(x[y==0,0],x[y==0,1],'bs')
# Virginica的参数用三角形表示
plt.plot(x[y==1,0],x[y==1,1],'g^')
# 绘制等高线,等高线表示概率
z = y_proba[:,1].reshape(x0.shape)
contour = plt.contour(x0,x1,z,cmap=plt.cm.brg)
plt.clabel(contour, inline=1)
plt.axis([2.9,7,0.8,2.7])
plt.text(3.5,1.5,'NOT Vir',fontsize=16, color='b')
plt.text(6.5,2.3,'Vir',fontsize=16, color='g')