补充上一节的决策边界绘制
所谓决策边界就是能够把样本正确分类的一条边界,主要有线性决策边界(linear decision boundaries)和非线性决策边界(non-linear decision boundaries)。
注意:这里用了两个特征值做预测,无论几个特征值最后都要映射到二维平面上,这里两个特征值更容易理解,x,y分别为特征值,z为预测的概率值,当概率值一样,就意味着这些点等高,我们可以画出一条线映射到二维平面,这样就是我们的决策边界
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
data = load_iris() # 将类实例化
X = data['data'][:,(2,3)] # 为了方便 我们只取其中两个特征来分析
y = (data['target'] == 2).astype(np.int)
log_res = LogisticRegression(C=10000) # 惩罚
log_res.fit(X,y) # 训练模型,将数据传入
# 构建坐标数据
# 我们需要使尽可能多的点落在坐标轴上,所以我们需要判断X中各维度数据的最大值及最小值
print(X[:,0].min(),X[:,0].max())
print(X[:,1].min(),X[:,1].max())
x0,x1 = np.meshgrid(np.linspace(2.9,7,500).reshape(-1,1),np.linspace(0.8,2.7,200).reshape(-1,1))
X_new = np.c_[x0.ravel(),x1.ravel()]
print(X_new.shape)
y_pro = log_res.predict_proba(X_new)
plt.figure(figsize=(10,4))
plt.plot(X[y==0,0],X[y==0,1],'bs')
plt.plot(X[y==1,0],X[y==1,1],'gs')
zz = y_pro[:,1].reshape(x0.shape)
contour = plt.contour(x0,x1,zz,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')
plt.text(6.5,2.3,'Vir')
plt.show()
多分类:
利用softmax进行多分类
可以理解为先放大差异(分子),在归一化
接下来同样是鸢尾花数据进行多分类
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
data = load_iris() # 将类实例化
X = data['data'] # 用其全部特征
y = data['target']
print(X)
print(y)
softmax_res = LogisticRegression(multi_class='multinomial',solver='sag') # 要加入一些参数
softmax_res.fit(X,y)
X_new = [[6,3,5,2]] # 随机整了一组数据进行分类
softmax_res.predict_proba(X_new)
print(softmax_res.predict_proba(X_new))