模型评估与参数调优实战
本章中,我们将使用代码进行实践,通过对算法进行调优来构建性能良好的机器学习模型,并对模型的性能进行评估。
基于流水线的工作流本节学习scikit-learn中的Pipeline类,它使得我们可以拟合出包含任意多个处理步骤的模型,并将模型用于新数据的预测。
加载威斯康辛乳腺癌数据集首先获取乳腺癌数据集:
12import pandas as pddf = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data', header=None)
该数据集划分为32列,前两列是样本唯一ID和对样本的诊断结果(M代表恶性,B代表良性),后面的几列是包含了30个从细胞核照片中提取的特征。接下来,将数据集的30个特征赋值给数组对象X,同时转换诊断结果为数字:
1234567from sklearn.preprocessing import LabelEncoderX = df.loc[:, 2:].valuesy = df.l ...
通过降维压缩数据
在本章中,我们将会学习到三种特征提取的方法,它们都可以将原始数据集变换到一个维度更低的新的特征子空间。
无监督数据降维技术之主成分分析主成分分析(PCA)是一种广泛应用于不同领域的无监督线性数据转换技术,突出作用是降维。PCA的目标是在高维数据中找到最大方差的方向,并且将数据映射到一个维度不大于原始数据的新的子空间上。
如果使用PCA技术,我们需要构建一个$ d * k $维的转换矩阵$ W $,从而将原来的d维特征向量转换为k维特征向量(k<d)。PCA算法的步骤如下:
对原始d维数据做标准化处理
构造样本的协方差矩阵
计算协方差矩阵的特征值和相应的特征向量
选择前k个最大特征对应的特征向量(k为新的特征空间维度)
通过前k个特征向量构建映射矩阵$ W $
将原始的d维特征$ x $通过$ W $转换为新的k维特征$ x’ $
总体方差和贡献方差这一小节完成PCA的前四个步骤。
首先,使用前面用到的葡萄酒数据集:
12import pandas as pddf_wine = pd.read_csv('https://archive.ics.uci.edu/ml ...
数据预处理
在本节中,我们将会学习主要的数据预处理技术,使用这些技术可以高效地构建好的机器学习模型。
缺失数据的处理在采集数据的时候,可能有的数据会有缺失的情况。通常我们见到的缺失值是数据表中的空值,或者是类似于NaN的占位符。
首先构造一个含有缺失值的CSV文件:
1234567891011121314import pandas as pdfrom io import StringIOcsv_data = """A, B, C, D1.0, 2.0, 3.0, 4.05.0, 6.0, , 8.010.0, 11.0, 12.0, """df = pd.read_csv(StringIO(csv_data))print(df) >> A B C D>> 0 1.0 2.0 3.0 4.0>> 1 5.0 6.0 NaN 8.0>> 2 10.0 11.0 12.0 NaN
上述代码中,我们通 ...
使用scikit-learn实现分类算法
在本节中,我们将会介绍常用分类算法的概念,以及如何使用 scikit-learn 机器学习库和选择机器学习算法时需要注意的问题。
分类算法的选择机器学习算法涉及到的五个步骤可以描述如下:
特征的选择
确定性能评价标准
选择分类器及其优化算法
对模型性能的评估
算法的调优
在本节中集中学习不同分类算法的概念,并再次回顾特征选择,预处理及性能评价指标等内容。
初涉 scikit-learn 的使用首先,使用 scikit-learn 来实现一个感知器模型,这个模型和前面讲的感知器模型类似。仍旧使用鸢尾花数据集中的两个特征。
提取150朵鸢尾花的花瓣长度和宽度两个特征的值,并且由此构建矩阵$ X $,同时将对应的类标赋值给$ y $:
123456from sklearn import datasetsimport numpy as npiris = datasets.load_iris()X = iris.data[:, [2, 3]]y = iris.target
为了评估训练得到的模型在位置数据上的表现,我们进一步将数据集划分为训练数据集和测试数据集:
1234from sk ...
机器学习分类算法
介绍最早以算法方式描述的分类机器学习算法:感知器和自适应线性神经元。同时我们也会使用Python来实现一个感知器。
早期机器学习概述罗森布拉特基于MCP模型提出了第一个感知器学习法则。在这个感知器规则中,他提出了一个自学习算法,此算法通过优化得到权重系数,此系数和输入值的乘机决定了神经元是否被激活。在监督学习中,类似算法可以用于预测样本所属的类别。
我们将类别问题看作是二值分类问题,为了简单起见,分为1(正类别)和**-1(负类别)。同时定义一个激励函数$ \phi(z) $,这个函数将会以特定的输入值x和相应的权值向量w**的线性组合作为输入,也就是说:$ z=w_1x_1 + \cdots + w_nx_n $。此时定义法治函数为阶跃函数:$$\begin{equation}\phi(z)=\begin{cases} 1, & z \ge \theta \ -1, & z \lt \theta\end{cases}\end{equation}$$其中,我们称$\theta$是阈值。
为了简单起见,可以将阈值移动到等式的左边,同 ...
赋予计算机学习数据的能力
主要了解机器学习的主要概念和几种不同类型的学习算法。
机器学习的三种方法监督学习使用有类标的数据构建模型,使用经训练得到的模型对未来的数据进行预测。预测方法主要有两种:
使用分类进行预测
分类是监督学习的一个子类,目的是对过往已知示例的观察与学习,实现对新样本类标的预测。检测垃圾邮件的例子就是一种二类标的方法,当然还有多类别分类的例子,比如字母表中每个字母的识别。
使用回归预测连续输出值
这种方法用于对连续型输出变量进行预测,比如学习成绩分数和自习时间多少之间进行预测。
强化(半监督)学习强化学习的目标在于构建一个系统,在于环境的交互过程中逐步提高系统的性能。环境的当前状态中通常包含者一个反馈信号。常用的例子是象棋对弈的例子,在这个例子中,系统根据棋盘上的局势(环境)来决定落子的位置,而游戏结束的输赢可以当做是反馈信号。
无监督学习在这种学习方法下,我们将会处理无类标数据或者是总体趋势不明朗的数据,来提取出有效信息探索数据的整体结构。
通过聚类发现数据的子群
聚类是一种探索性的数据分析技术,在没有任何相关先验信息的情况下,它可以帮我们将数据分成有意义的小组别。
数 ...
Git 使用总结
整理在使用 Git 过程中的一些总结。
merge / rebase两者都是将其他分支上修改应用到当前工作分支上,不同的是 merge 会产生一个与 merge 相关的提交记录,而 rebase 则不会产生,除此之外,两者之间的 git flow 如下:
cherry-pick用于将一些修改应用到当前工作的分支上:
1git cherry-pick <commitHash> | <HashA>..<HashB>
上面的命令分别表示应用 <commitHash> 以及 (HashA, HashB] 到当前工作的分支上。
shallow update not allowed这个问题的产生原因是在克隆远程仓库的时候采用了以下命令:
1git clone --depth=<num> <remote-url>
这将会导致shallow clone(浅复制)。这将会使得这个仓库不能向远程仓库进行push。通过以下命令可修复:
1git fetch --unshallow <remote-repo> ...