<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cross-Validation on TouchingFish.top</title><link>https://touchingfish.top/tags/cross-validation/</link><description>Recent content in Cross-Validation on TouchingFish.top</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 21 Jan 2019 00:00:00 +0000</lastBuildDate><atom:link href="https://touchingfish.top/tags/cross-validation/index.xml" rel="self" type="application/rss+xml"/><item><title>699个名字（机器学习领域的"Hello World"）</title><link>https://touchingfish.top/2019/brca-detection-with-sklearn/</link><pubDate>Mon, 21 Jan 2019 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2019/brca-detection-with-sklearn/</guid><description>&lt;p&gt;打开这个数据集的时候，脑子里突然闪过一个问题：class 那一列里的 2 和 4，分别对应的是&amp;quot;良性&amp;quot;和&amp;quot;恶性&amp;quot;——但这两个数字背后，坐着的是谁？&lt;/p&gt;
&lt;h2 id="699个女人"&gt;699个女人&lt;/h2&gt;
&lt;p&gt;威斯康星乳腺癌数据集（Wisconsin Breast Cancer Dataset），算是机器学习领域的&amp;quot;Hello World&amp;quot;。699个样本，每个样本有10个细胞特征：clump_thickness（结块厚度）、uniform_cell_size（细胞大小均匀性）、uniform_cell_shape（细胞形状均匀性）、marginal_adhesion（边缘黏附力）、single_epithelial_size（单上皮细胞大小）、bare_nuclei（裸核）、bland_chromatin（淡染色质）、normal_nucleoli（正常核仁）、mitoses（核分裂）。&lt;/p&gt;
&lt;p&gt;这些特征听起来抽象，却是病理医生在显微镜下实实在在看过的东西。&lt;/p&gt;
&lt;p&gt;他们在数细胞层数，量细胞直径，看细胞边缘是光滑还是锯齿状，观察细胞核被染成什么颜色。每一个1到10的数字，都是人眼与人脑的判断——是经验的积累，是训练的痕迹。&lt;/p&gt;
&lt;p&gt;数据里的每一行，曾经是一个女人坐在诊室里，等待活检结果。&lt;/p&gt;
&lt;h2 id="细胞的语言"&gt;细胞的语言&lt;/h2&gt;
&lt;p&gt;病理医生看细胞，和我们看人很像。&lt;/p&gt;
&lt;p&gt;看形状——圆润的倾向于良性，畸形的倾向于恶性。看边界——边界清晰的通常良性，黏连在一起的往往恶性。看颜色——染色均匀的相对正常，染色质浓集发黑的令人担忧。&lt;/p&gt;
&lt;p&gt;这不是玄学。是几千例病例训练出来的直觉。&lt;/p&gt;
&lt;p&gt;而机器学习做的事情，简单来说就是：绕过医生的经验，用算法把这些&amp;quot;直觉&amp;quot;数字化、规则化。SVM（Support Vector Machine，支持向量机）在高维空间里找到一条最优分割线，把良性样本和恶性样本分开。KNN（K-Nearest Neighbors，K近邻）则是&amp;quot;物以类聚&amp;quot;——看一个未知样本的5个最近邻居是什么类别，由多数投票决定它属于哪一类。&lt;/p&gt;
&lt;p&gt;KNN 选 K=5，是因为经验发现这个数值通常效果较好。太少容易受噪声影响，太多又会模糊边界。&lt;/p&gt;
&lt;p&gt;SVM 的核函数（kernel）把细胞特征映射到高维空间，在那个空间里，线性不可分的数据变得可以分开。&lt;/p&gt;
&lt;h2 id="10折交叉验证"&gt;10折交叉验证&lt;/h2&gt;
&lt;p&gt;直接用全部数据训练，然后测试，会发生什么？&lt;/p&gt;
&lt;p&gt;模型可能&amp;quot;背住&amp;quot;了训练数据，而不是真的学会了规律。就像考试前背答案，遇到新题就傻眼。&lt;/p&gt;
&lt;p&gt;10折交叉验证（10-fold cross validation）解决的是这个问题。把数据随机分成10份，轮流让9份当训练集、1份当测试集，做10次实验，最后取平均准确率。&lt;/p&gt;
&lt;p&gt;结果是：KNN 96.6%，SVM 96.0%。看起来差不多，但实际上——&lt;/p&gt;
&lt;p&gt;KNN 的标准差是 2.9%，SVM 是 3.3%。KNN 更稳定。&lt;/p&gt;
&lt;p&gt;这意味着什么？KNN 在10次实验里波动较小，SVM 则有时表现更好、有时更差。对于实际部署来说，稳定比偶尔的高分更重要。&lt;/p&gt;
&lt;h2 id="precisionrecall与生命的重量"&gt;Precision、Recall、与生命的重量&lt;/h2&gt;
&lt;p&gt;但准确率（accuracy）不是唯一的指标。在医疗场景下，误诊和漏诊的代价是不同的。&lt;/p&gt;
&lt;p&gt;Precision（精确率）：预测为恶性的样本里，真正是恶性的比例。&lt;/p&gt;
&lt;p&gt;Recall（召回率）：所有恶性样本里，被正确识别出来的比例。&lt;/p&gt;
&lt;p&gt;F1-Score是这两者的调和平均。&lt;/p&gt;
&lt;p&gt;SVM 报告里的 Class 2（良性）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Precision = 1.00：预测良性的，几乎全对&lt;/li&gt;
&lt;li&gt;Recall = 0.95：100个良性里，有5个被误判为恶性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SVM 报告里的 Class 4（恶性）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Precision = 0.90：预测恶性的，10个里有1个其实是良性&lt;/li&gt;
&lt;li&gt;Recall = 1.00：所有恶性都被找到了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于癌症筛查，Recall 更关键。漏诊一个癌症患者，比误诊一个良性肿瘤更危险——后者只需要进一步检查，前者可能延误治疗时机。&lt;/p&gt;</description></item></channel></rss>