奎克的藏经阁 · MinerU 解析内容

人工智能与大数据技术导论

490 个 PDF 物理页 · 本页显示文件第 311–320 页

PDF 物理页索引 310

文件中的第 311 页 · 印刷页码:294

人工智能与大数据技术导论

294

PDF 物理页索引 311

文件中的第 312 页 · 印刷页码:295

开始训练:

第9章 TensorFlow高级知识

295

PDF 物理页索引 312

文件中的第 313 页 · 印刷页码:296

人工智能与大数据技术导论

结果如图9-31、图9-32所示。

分类的几个评价指标有准确率、ROC曲线、AUC(ROC曲线下面积)等。下面的代码使用LinearClassifier.evaluate来计算一些指标值:

结果如图 9-33 所示。

296

PDF 物理页索引 313

文件中的第 314 页 · 印刷页码:297

为了画出ROC曲线,我们使用sklearn的 roc curve来获得真正例和假正例的比率。其代码如下:

结果如图9-34所示。

下面调整一些参数,看看能否改进AUC。一种方法是增加迭代的次数;另一种方法是加大批处理大小。

第9章 TensorFlow 高级知识

297

PDF 物理页索引 314

文件中的第 315 页 · 印刷页码:298

结果如图9-35、图9-36所示。

9.5 L1正则化

我们再来研究一下特征交叉组合(FeatureCross)。特征交叉组合很有用,但也可能会带来一些问题,尤其是将稀疏特征交叉组合起来的时候。稀疏矢量通常包含许多维度,创建特征交叉组合会导致包含更多维度。由于使用此类高维度特征矢量,因此模型可能会非常庞大,并且需要大量的RAM。在高维度稀疏矢量中,最好尽可能使权重正好降至0。正好为0的权重基本上会使相应特征从模型中移除。将特征权重设为0可节省RAM空间,且可以减少模型中的噪点。例如,以一个涵盖全世界(不只是涵盖加州)的住房数据集为例。如果按分(每度为60分)对全球纬度进行分桶,则在一次稀疏编码过程中会产生大约1万个维度;如果按分对全球经度进行分桶,则在一次稀疏编码过程中会产生大约2万个维度。这两种特征的特征交叉组合会产生大约2亿个维度。这2亿个维度中,很多维度代表非常有限的居住区域(例如海洋里),很难使用这些数据进行有效泛化。如果为这些不需要的维度浪费RAM,就太不值得了。因此,最好使无意义维度的权重正好降至0。

人工智能与大数据技术导论

298

PDF 物理页索引 315

文件中的第 316 页 · 印刷页码:299

从上面的例子可以看出,即便我们拥有大量的训练数据,但其中仍有许多组合会非常罕见,因此我们最终可能会得到一些噪声系数,并可能遇到过拟合问题。可想而知,如果遇到过拟合问题,我们就要进行正则化。遗憾的是,L2正则化不能完成此任务。L2正则化可以使权重变小,但是并不能使它们正好为0。

那么,能不能以特定方式进行正则化,既能缩减模型大小,又能降低内存使用量呢?我们要做的就是将部分权重设为0,这样就不必处理其中的一些特定组合了。这样既节省了内存,还有可能帮助我们解决过拟合问题。不过必须小心一点,因为我们只想去掉那些额外的噪音系数,而不想失去正确的系数。所以要做的就是明确地将一些权重设为0,也就是所谓的L0正则化,它对不是0的权重进行惩罚。但是,它没有凸性(convex),难以优化。因此,L0正则化这种想法在实践中并不是一种有效的方法。

如果我们将条件放宽至L1正则化,只对权重的绝对值总和进行处罚,那么仍可以促使模型变得非常稀疏。这也会让其中的许多系数归零。这种正则化与L2正则化略有不同(因为L2也会尝试设置较小的权重,但实际上并不会让权重归零)。

在线性回归模型中,一个权重为0的特征等同于不用这个特征。为了减少模型复杂性,一种方法是使用正则函数来鼓励一些权重为0。除了避免过拟合外,这种做法也会更有效。下面我们通过一些代码实例来体会。

先装载数据集:

第9章 TensorFlow高级知识

299

PDF 物理页索引 316

文件中的第 317 页 · 印刷页码:300

定义训练集和评估集:

人工智能与大数据技术导论

300

PDF 物理页索引 317

文件中的第 318 页 · 印刷页码:301

结果如图9-37\~图9-40所示。

第9章 TensorFlow高级知识

301

PDF 物理页索引 318

文件中的第 319 页 · 印刷页码:302

定义输入函数:

人工智能与大数据技术导论

302

PDF 物理页索引 319

文件中的第 320 页 · 印刷页码:303

第9章 TensorFlow 高级知识

303