机器学习:逻辑回归(决策边界)

机器学习:逻辑回归(决策边界
⼀、基础理解
决策边界:在特征空间内,根据不同特征对样本进⾏分类,不同类型间的分界就是模型针对该数据集的决策边界。
决策边界,⽤于分类问题中,通过决策边界可以更好的可视化分类结果;
在⼆维特征空间中,决策边界为⼀条直线,理论上,在该直线上 θ.T.x = 0,但实际上不⼀定存在这样的样本点;
通过决策边界可以直接根据样本在特征空间的位置对该样本的类型进⾏预测;
满⾜决策边界条件的样本点,分为哪⼀类都可以,但实际应⽤中很少发⽣;
作⽤:得到⼀个模型后,可以直接绘制该模型的决策边界,然后再绘制出需要预测的样本点,根据样本点相对于特征空间中的决策边界的分布,直接预测样本的类型;
1. 通过决策边界可以直接根据样本在特征空间的位置对该样本的类型进⾏预测;
决策:根据样本发⽣概率 p 的值,到底将该样本分为哪⼀类?
边界:
1)函数 σ(t) 的特点,t > 0 时σ(t) > 0.5(也就是 P > 0.5);t < 0 时σ(t) < 0.5(也就是 P < 0.5); 
2)也就是 ý 的最终预测结果,由 θT.x b 决定,决定的边界条件就是 θT.x b = 0;
⼆、两种特征的数据集的决策边界(限线性回归、逻辑回归)
⼆维特征空间中,决策边界是⼀条理论上的直线,该直线是有线性模型的系数和截距决定的,并不⼀定有样本满⾜此条件;
如果样本只有两个特征,决策边界可以表⽰为:
θT.x b = θ0 + θ1.x1 + θ2.x2 = 0,则该边界是⼀条直线,因为分类问题中特征空间的坐标轴都表⽰特征;
1. 则有:;
 1)在⼆维特征空间中绘制决策边界
模拟数据集并绘制
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
X = X[y<2, :2]
y = y[y<2]
plt.scatter(X[y==0, 0], X[y==0, 1], color='red')
plt.scatter(X[y==1, 0], X[y==1, 1], color='blue')
plt.show()
⽤⾃⼰的逻辑回归算法训练模型并绘制模型针对模拟数据集的决策边界ain_test_split import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, seed=666)
from playML.LogisticRegression import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
# x2()函数:求满⾜决策边界关系的直线的函数值;
def x2(x1):
return (-f_[0] * x1 - log_reg.intercept_) / f_[1]
x1_plot = np.linspace(4, 8, 1000)
x2_plot = x2(x1_plot)
plt.scatter(X[y==0, 0], X[y==0, 1], color='red')
plt.scatter(X[y==1, 0], X[y==1, 1], color='blue')
plt.plot(x1_plot, x2_plot)
plt.show()
该边
三、不规则的决策边界的绘制⽅法
思路:特征空间中分布着⽆数的点,通过细分,将特征空间分割⽆数的点,对于每⼀个点都使⽤模型对其进⾏预测分类,将这些预测结果绘制出来,不同颜⾊的点的边界就是分类的决策边界;
分割⽅法:将特征空间的坐标轴等分为 n 份(可视化时只显⽰两种特征),则特征空间被分割为 n X n 个点(每个点相当于⼀个样本),⽤模型预测这 n2 个点的类型,经预测结果(样本点)显⽰在特征空间;
 1)将绘制决策边界的代码封装起来
# plot_decision_boundary()函数:绘制模型在⼆维特征空间的决策边界;
def plot_decision_boundary(model, axis):
# model:算法模型;
# axis:区域坐标轴的范围,其中 0,1,2,3 分别对应 x 轴和 y 轴的范围;
# 1)将坐标轴等分为⽆数的⼩点,将 x、y 轴分别等分(坐标轴范围最⼤值 - 坐标轴范围最⼩值)*100 份,
# np.meshgrid():
x0, x1 = np.meshgrid(
np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1),
np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1)
)
# np.c_():
X_new = np.c_[x0.ravel(), x1.ravel()]
# 2)model.predict(X_new):将分割出的所有的点,都使⽤模型预测
y_predict = model.predict(X_new)
zz = shape(x0.shape)
# 3)绘制预测结果
lors import ListedColormap
custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])
四、绘制不同模型的决策边界(使⽤模拟的数据集训练模型)
 1)绘制逻辑回归算法的模型的决策边界
plot_decision_boundary(log_reg, axis=[4, 7.5, 1.5, 4.5])
plt.scatter(X[y==0, 0], X[y==0, 1], color='red')
plt.scatter(X[y==1, 0], X[y==1, 1], color='blue')
plt.show()
1. 两种⾊块就是将特征空间分割成 n2 个样本点的分类结果;两种⾊块的分界线就是该模型的决策边界;
 2)绘制kNN 算法的模型的决策边界(2 种样本)
ighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train, y_train)
plot_decision_boundary(knn_clf, axis=[4, 7.5, 1.5, 4.5])
plt.scatter(X[y==0, 0], X[y==0, 1])
plt.scatter(X[y==1, 0], X[y==1, 1])
plt.show()
 3)绘制kNN 算法的模型的决策边界( 3 种样本)
代码
knn_clf_all = KNeighborsClassifier()
knn_clf_all.fit(iris.data[:,:2], iris.target)
# 输出:KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=5, p=2,
weights='uniform')
plot_decision_boundary(knn_clf_all, axis=[4, 8, 1.5, 4.5])
plt.scatter(iris.data[iris.target==0,0], iris.data[iris.target==0,1])
plt.scatter(iris.data[iris.target==1,0], iris.data[iris.target==1,1])
plt.scatter(iris.data[iris.target==2,0], iris.data[iris.target==2,1])
plt.show()
问题
1. 决策边界不规则,图中黄⾊区域和蓝⾊区域的界限不明显;
2. 黄⾊区域存在绿⾊的点,蓝⾊区域存在橙⾊的点;
原因:模型可能过拟合;
⽅案:重新调整参数训练模型;
1. n_neighbors=5,模型的 k 参数选择了 5,太⼩,导致模型太复杂;(kNN 算法中,k 值越⼩模型越复杂)
更改 k 参数,重新绘制
knn_clf_all = KNeighborsClassifier(n_neighbors=50)
knn_clf_all.fit(iris.data[:,:2], iris.target)
# 输出:KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=50, p=2,
weights='uniform')
plot_decision_boundary(knn_clf_all, axis=[4, 8, 1.5, 4.5])
plt.scatter(iris.data[iris.target==0,0], iris.data[iris.target==0,1])
plt.scatter(iris.data[iris.target==1,0], iris.data[iris.target==1,1])
plt.scatter(iris.data[iris.target==2,0], iris.data[iris.target==2,1])
plt.show()

本文发布于:2024-09-21 08:42:07,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/377839.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:决策   模型   边界
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议