真实为 1 就应该 sigmoid 尽量大 真实为 0 就应该1- sigmoid 尽量大 此种情况下损失函数尽可能小
图像解读: 真实为1 的时候 黄线 输出的 sigmoid 就是表示1 的概率 所以损失函数会逐渐变小
损失函数不同 。 逻辑回归实际是分类问题 在引入多项式特征 ,线性回归可以处理 非线性问题
#分类的结果分布 X1 = X[y == 0] X2 = X [y == 1] plt.rcParams["font.family"] = 'SimHei' #分别获取到属于不同类别的 花瓣长度和花瓣宽度,就可以得到样本分布了 plt.scatter(X1[:,0],X1[:,1],c = 'r',label= '类别0') plt.scatter(X2[:,0],X1[:,1],c = 'g',label= '类别1') plt.legend() plt.xlabel("花瓣长度") plt.ylabel("花瓣宽度") plt.title("花瓣的样本分布")
链接: https://blog.csdn.net/lllxxq141592654/article/details/81532855.
https://blog.csdn.net/lllxxq141592654/article/details/81532855
绘制决策边界
#绘制决策边界: from matplotlib.colors import ListedColormap def plot_decision_boundary(model,X,y): color = ["r","g","b"] marker = ["o","v","x"] #标签去重,得到具体有几类 class_label = np. unique(y) #选择会用到的颜色列表 camp =ListedColormap(color[ : len(class_label)]) #二分类下有两列 按列去各列的最小值 x1_min,x2_min = np.min(X,axis = 0) #二分类下有两列 按列去各列的最大值 x1_max,x2_max = np.max(X,axis = 0) #防止贴着边界 x1 = np.arange(x1_min -1 ,x1_max + 1,0.02) x2 = np.arange(x2_min -1 ,x2_max + 1,0.02) X1,X2 = np.meshgrid(x1 , x2) #转置是因为 [X1.ravel(),X2.ravel()]这里是2行 n列 转置变成 n行2列 Z = model.predict(np.array ( [X1.ravel(),X2.ravel()] ).T ).reshape(X1.shape) #绘制使用颜色填充的等高线: plt.contourf(X1,X2,Z,camp = camp,alpha =0.5 ) #设置透明度 ,背景色不能和分类的颜色相同,不然覆盖了 for i ,class_ in enumerate(class_label) : plt.scatter(x = X[y == class_,0] , y = X[y == class_, 1 ] , c =camp.colors[i] ,marker = marker[i],label = class_) plt.legend() plt.show()为了画决策边界, 都是两个特征
决策边界可以在一定程度帮我们查看模型是否过于复杂了,过拟合问题