在本实验中,您将对比回归和分类。
import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from lab_utils_common import dlc, plot_data
from plt_one_addpt_onclick import plt_one_addpt_onclick
plt.style.use('./deeplearning.mplstyle')
分类问题
分类问题的例子有:确定电子邮件是垃圾邮件还是非垃圾邮件,或者确定肿瘤是恶性的还是良性的。特别地,这些是有两种可能结果的二元分类的例子。结果可以用成对的“积极”/“消极”来描述,比如“是”/“否”、“真”/“假”或“1”/“0”。
分类数据集的图通常使用符号来表示示例的结果。在下面的图表中,“X”表示正数值,而“O”表示负结果。
x_train = np.array([0., 1, 2, 3, 4, 5])
y_train = np.array([0, 0, 0, 1, 1, 1])
X_train2 = np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]])
y_train2 = np.array([0, 0, 0, 1, 1, 1])
pos = y_train == 1
neg = y_train == 0
fig,ax = plt.subplots(1,2,figsize=(8,3))
#plot 1, single variable
ax[0].scatter(x_train[pos], y_train[pos], marker='x', s=80, c = 'red', label="y=1")
ax[0].scatter(x_train[neg], y_train[neg], marker='o', s=100, label="y=0", facecolors='none',
edgecolors=dlc["dlblue"],lw=3)
ax[0].set_ylim(-0.08,1.1)
ax[0].set_ylabel('y', fontsize=12)
ax[0].set_xlabel('x', fontsize=12)
ax[0].set_title('one variable plot')
ax[0].legend()
#plot 2, two variables
plot_data(X_train2, y_train2, ax[1])
ax[1].axis([0, 4, 0, 4])
ax[1].set_ylabel('$x_1$', fontsize=12)
ax[1].set_xlabel('$x_0$', fontsize=12)
ax[1].set_title('two variable plot')
ax[1].legend()
plt.tight_layout()
plt.show()
在上面的图表中:
- 在单变量图中,阳性结果显示为红色的“X”和y=1。阴性结果为蓝色“O”,位于y=0处。
- 回想一下,在线性回归的情况下,y不会被限制为两个值,而是可以是任何值。
- 在双变量图中,y轴不可用。阳性结果用红色的“X”表示,阴性结果用蓝色的“O”表示。
- 回想一下,在多变量线性回归的情况下,y不会局限于两个值,类似的图将是三维的。
线性回归方法
在前一周,我们应用了线性回归来构建预测模型。让我们用课上讲过的简单例子来试试这个方法。该模型将根据肿瘤大小预测肿瘤是良性还是恶性。试试下面的方法:
-
点击“运行线性回归”以找到给定数据的最佳线性回归模型。
- 注意所得线性模型与数据不匹配。
改善结果的一个选项是应用一个“阈值”。
- 注意所得线性模型与数据不匹配。
-
勾选“切换0.5阈值”上的框,以显示如果应用阈值的预测。
- 这些预测看起来不错,预测与数据相符
-
重要:现在,在最右边添加更多的“恶性”数据点,在大肿瘤大小范围内(接近10),并重新运行线性回归。
- 现在,模型预测了更大的肿瘤,但是x=3的数据点被错误地预测了!
-
要清除/更新plot,请重新运行包含plot命令的单元格。
w_in = np.zeros((1))
b_in = 0
plt.close('all')
addpt = plt_one_addpt_onclick( x_train,y_train, w_in, b_in, logistic=False)
上面的例子表明,线性模型不足以对分类数据进行建模。该模型可以按照以下实验的描述进行扩展。