作为笔记记录阅读,因为调用库的更新,相对应的对代码也进行了更新。
任务种类:
一些术语:
需要保证:出现在测试集中的数据样本一定不能被用于模型训练
任务的基本架构和流程:
准备训练数据->抽取所需要的特征,形成特征向量(Feature Vectors)->将特征向量连同对应的标记/目标(Labels)一并送入学习算法(Machine Learning Algorithm)->训练出一个预测模型(Predictive Model)->采用同样的特征抽取方法作用于新测试数据,得到用于测试的特征向量->使用预测模型对这些待测试的特征向量进行预测并得到结果(Expected Label)
一种假设特征与分类结果存在线性关系的模型。通过累加计算每个维度的特征与各自权重的乘积来帮助类别决策。
定义\(\bold{x}=<x_1,x_2,\cdots,x_n>\)来代表\(n\)维特征列向量,同时用\(n\)维列向量\(\bold{w}=<w_1,w_2,\cdots,w_m>\)来代表对应的权重,或者系数(Coefficient);同时为了避免其过坐标原点这种硬性假设,增加一个截距(Intercept)\(b\)。由此这种线性关系可以表达为\(f(\bold{w},\bold{x},b)=\bold{w}^\mathrm{T}\bold{x}+b\),这里的\(f\in \mathbb{R}\),取值范围分布再整个实数域中。
所要处理的最简单的二分类问题\(f\in \{0,1\}\);因此需要一个函数把原先的\(f\in \mathbb{R}\)映射到\((0,1)\)。使用Logistic函数:$$\Large g(z)=\frac{1}{1+e^{-x}}$$
可以观察到该模型如何处理一个待分类的特征向量:
如果\(z=0\),那么\(g=0.5\);若\(z<0\)则\(g<0.5\),这个特征向量被判为一类;反之,若\(z>0\),则\(z>0\),则\(g>0.5\),其被归为另外一类。
综上,如果将\(z\)替换为\(f\),整合可得:经典的线性分类器,Logistic Regression:
\(\Large h_{\bold{w},b}(\bold{x})=g(f(\bold{w},\bold{x},b))=\frac{1}{1+e^{-f}}=\frac{1}{1+e^{-(\bold{w}^\mathrm{T}\bold{x}+b)}}\)
由于原始数据没有提供对应的测试样本用于评估模型性能,因此需要对带有标记的数据进行分割。通常情况下,25%的数据会作为测试集,其余75%的数据用于训练。
综上,用于训练样本共有512条(344条良性肿瘤数据、168条恶性肿瘤数据),测试样本有171条(100条良性肿瘤数据、71条恶性肿瘤数据)。
使用Logistic Regression和随机梯度参数估计两种方法对上述处理后的训练数据进行学习,并且根据测试样本特征进行预测。
fit_transform
和transform
的区别:
fit_transform
是fit
和transform
的组合fit(x,y)
传两个参数的是有监督学习的算法,fit(x)
传一个参数的是无监督学习的算法,比如降维、特征提取、标准化。fit
和transform
没有任何关系,之所以出来这么个函数名,仅仅是为了写代码方便,所以会发现transform()
和fit_transform()
的运行结果是一样的。- 注意:运行结果一模一样不代表这两个函数可以互相替换,绝对不可以!
transform
函数是一定可以替换为fit_transform
函数的,fit_transform
函数不能替换为transform
函数!引用地址:https://www.cnblogs.com/keye/p/8875128.html
line 9 warning:
x由于经过了StandardScaler()
,导致其被转化为了array
格式,也就不存在feature names
了。因此需要重新转回dataFrame
并和feature names
匹配。
计算171条测试样本中,预测正确的百分比。将这个百分比称作准确性(Accuracy),并且将其作为评估分类模型的一个重要性能指标。
在二分类任务下,预测结果(Predicted Condition)和正确标记(True Condition)之间存在4种不同的组合,构成混淆矩阵(Confusion Matrix)。
四个指标:
\(\Large准确性 \mathrm{Accuracy}=\frac{\#(\mathrm{True\,Positive})+\#(\mathrm{True\,Negative})}{\#(\mathrm{True\,Positive})+\#(\mathrm{True\,Negative})+\#(\mathrm{False\,Positive})+\#(\mathrm{False\,Negative})}\)
\(\Large精确率 \mathrm{Precision}=\frac{\#(\mathrm{True\,Positive})}{\#(\mathrm{True\,Positive})+\#(\mathrm{False\,Positive})}\)
\(\Large召回率 \mathrm{Recall}=\frac{\#(\mathrm{True\,Positive})}{\#(\mathrm{True\,Positive})+\#(\mathrm{False\,Negative})}\)
\(\mathrm{F1\,measure}\):\(\mathrm{F1}\)指标综合考量召回率与精确率
\(\Large \mathrm{F1\,measure}=\frac{2}{\frac{1}{\mathrm{Precision}}+\frac{1}{\mathrm{Recall}}}\)
采用调和平均数,是因为它除了具备平均功能外,还会对那些召回率和精确率更加接近的模型给予更高的分数。
特点分析:
在之前“良/恶性肿瘤肿瘤预测”的例子中,曾经使用多个不同颜色的直线作为线性分类的边界。同样,如图2-5所示的数据分类问题,我们更有无数种线性分类边界可供选择。
由于这些分类模型最终都是要应用在未知分布的测试数据上,因此我们更加关注如何最大限度地为未知分布地数据提供足够地待预测空间。
支持向量机分类器(Support Vector Classifier),便是根据训练样本地分布,搜索所有可能地线性分类器中最佳地那一个。根据图片我们会发现决定其直线位置的样本并不是所有的训练数据,而是其中的两个空间间隔最小的两个不同类别的数据点。
如果未知的待测数据也如训练数据一样分布,那么的确支持向量机可以帮助我们找到最佳的分类器。
指出: