垃圾邮件分类器
数据集说明:数据集包含5574条数据,每条数据包含邮件类型(是否为垃圾邮件)以及邮件的标题。</br>程序说明:采用逻辑回归算法,由Python语言实现垃圾邮件分类。</br>算法理论请参照:逻辑回归算法、贝叶斯分类器、偏斜类误差度量</br>Ipynb演示文件:Ipynb文件</br>Python代码:Python代码</br>
12345678"""Reading a text-based dataset by pandas"""# 读取以制表符分隔值的文本文件,定义第一列列名为type,余下所有的列为一整体,列名为message。import pandas as pdsms = pd.read_table('sms.tsv', header=None, names=['type', 'message'])#查看sms Dataframe的前五行内容。sms.head()
12# 统计type列中不同类 ...
鸢尾花分类器
数据集说明:Iris数据集也称鸢尾花卉数据集是常用的分类实验数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据。每个数据包含4个属性:花萼长度,花萼宽度,花瓣长度,花瓣宽度。依据4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。</br>程序说明:采用三种不同的机器学习算法(sklearn KNN、Decision Tree、自实现的KNN)由Python语言实现鸢尾花卉的分类。</br>算法理论请参照:KNN算法、决策树算法</br>Ipynb演示文件:Ipynb文件</br>Python代码:Python代码</br>
123#This data sets consists of 3 different types of irises’ (Setosa, Versicolour, and Virginica) #petal and sepal length, stored in a 150x4 numpy.ndarray#The r ...
5.5 自动化机器学习
自动化机器学习起源于网格搜索概念,是一种流水线(也称管道)。它通过搜索方法、变换特征、混合参数值来获得最佳解决方案。TPOT是自动化机器学习的一个应用框架,提供了遗传算法这样的应用,可用来在某个配置中混合各个参数并达到最佳设置。常见的自动机器学习库:TPOT、Auto-Sklearn、Auto-Weka、Machine-JS、DataRobot。
5.5.1 遗传算法基础遗传算法(Genetic Algorithm)描述:遵循适者生存、优胜劣汰的原则,是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法,属于启发式搜索算法一种。</br>模拟一个人工种群的进化过程,通过选择、交叉以及变异等机制,在每次迭代中都保留一组候选个体,重复此过程,种群经过若干代进化后,理想情况下其适应度达到近似最优的状态。
遗传算法组成:
基因:一个遗传因子。
染色体:包含一组基因,个体是包含某一染色体。
种群:是染色体的集合,由个体组成。
适应度函数:个体适应度判断,适者生存。
选择(Selection):优胜劣汰,仅适应环境的个体可以繁衍后代。
交叉(Corssover):新个体会遗传父 ...
5.4 大型机器学习系统应用技术
5.4.1 机器学习系统上限分析在大型机器学习的应用中,通常需要通过几个步骤才能进行最终的预测,一般先通过上限分析知道哪一部分最值得花时间和精力去改善,上限分析是从管道开始的部分,逐级手工提供 100%正确的输出结果,然后看应用的整体效果提升了多少,找出瓶颈。
5.2.2 大规模数据机器学习通过学习曲线诊断,确定合适大小的训练集假若应对一个有 100 万条记录的训练集,以线性回归模型为例,每一次梯度下降迭代,都需要计算训练集的误差的平方和,计算代价非常大。</br>通过绘制学习曲线判定大规模的训练集是否必要,也许只用 1000记录也能获得较好的效果。
采用随机梯度下降法,加快训练速度 Stochastic Gradient Descent—随机梯度下降法
适用场景:若一定需要一个大规模的训练集,可以尝试使用随机梯度下降法来代替批量梯度下降法。定义单一训练实例的代价函数为:
cost(θ,(x^{(i}),y^{(i)}))=\frac {1}{2} (h_θ (x^{(i)})-y^{(i)})^2算法描述:首先将训练集数据打乱,然后运行随机梯度下降算法,在每一次计算 ...
5.3 如何改进机器学习算法?
5.3.1 机器学习算法一般改进方法 获得更多的训练实例可解决高方差(未来)。
改变特征数量减少特征数量可解决高方差(未来),增加特征数量可解决高偏差(现在)。
改变多项式次数减少多项式次数可解决高方差(未来),增加多项式次数可解决高偏差(现在)。
改变正则化参数作用:减小正则化参数可解决高偏差(现在),增加正则化参数可解决高方差(未来)。
基本思想:基于模型复杂性对其进行惩罚,偏好那些相对简单的能更好的泛化的模型,可以解决过度拟合问题。通过增加一个额外的项到代价函数上,这个项叫做正则化项,消除或降低过拟合的影响,缺点是惩罚会造成欠拟合很难校准。
正则化分类:
L1 正则化:\(C=C_0+λ/n ∑_w |w|\) ,在原始代价函数 \(C_0\) 上加上一个权重绝对值的和。倾向于聚集权重在相对少量的高重要度连接上,而其他权重就会被驱使向 0 接近。
L2正则化:\(C=C_0+λ/n ∑_w w^2\),在原始代价函数 \(C_0\) 上加上一个权重平方和。可以看做是一种寻找小的权重和最小化原始的代价函数之间的折中,\(λ\) 越小就偏向于最小化原始代价函数,反之倾向于 ...
5.2 如何评估机器学习算法?
一般先通过交叉验证的方法,获取算法的测试数据,然后运用一系列的评估指标来量化算法优劣,如:学习曲线诊断、偏差方差诊断、偏斜误差度量等。
5.2.1 机器算法评估基础 测试集划分方法: 常规方法:
将数据集随机分成训练集(70%)和测试集(30%)。
算法通过训练集训练后,得到使代价函数 \(J(θ)\) 最小的 \(θ\)参数,获得模型。
对测试集运用该模型,计算代价函数误差指标 \(J{test} (θ)\) 或误分类比率指标 \(Test{error}\)。
根据计算出的指标值来评估机器学习算法的优劣。
常规方法弊可能可以很好的拟合数据集,但是可能不能很好的推广到一般情况。
交叉验证集方法:
将数据集随机分成训练集(60%)、交叉验证集(20%)和测试集(20%)。
算法通过训练集训练后,使代价函数 \(J_{train} (θ)\) 最小的 \(θ\)参数,获得模型。
对交叉验证集运用该模型,计算得出交叉验证误差 \(J_{cv} (θ)\),选取代价函数值最小的模型。
用选出的模型对测试集计算得出推广误差,即代价函数的 \(J_{test} (θ)\)。
数据泛化与 ...
5.1 机器学习系统设计最佳实践
定义问题 进行需求分析,定义问题。不同类型的问题有各自适用的机器学习模型,如:图像分析采用CNN模型、推荐相关问题有专门的推荐算法、安全相关问题有异常检测模型等。所以脱离具体问题去讨论算法或模型是没有意义的。
收集数据 收集数据的重要性:若数据集足够的大且包含了足够多的信息,在机器学习领域中普遍的共识是“取得成功的人不是拥有最好算法的人,而是拥有最多数据的人”。
数据集获取方式:
众包外包:从第三方获取被标记的数据集。
手动收集数据并标记数据:需要考虑手动收集标记需要的时间。
人工数据合成:在已有的数据上加上噪声合成新的数据,从而获得更多的数据。
特征工程 将原始数据转变为特征,通过这些特征可以很好的描述这些数据,并且利用这些特征建立模型,能让模型在未知的数据上的表现出最优的性能。</br>
主要工作:
从原始数据中清洗出特征数据和标注数据。
对清洗出的特征和标注数据进行进一步处理,最终生成的数据集供训练和测试模型使用。如:异常点去除、样本采集、特征降维,特征归一化、特征组合等过程。
一般步骤:
提取特征:运用“头脑风暴”法,不考虑特征的重要性,从原始数据中 ...
4.7 循环神经网络
4.7.1 循环神经网络基本模型 4.7.1.1 单向循环神经网络模型描述:
输入:\(X_t\)向量表示\(t\)时刻输入层的值。
隐藏层:\(A_t\)向量表示\(t\)时刻隐藏层的值,隐藏层的节点数与向量\(A_t\)的维度相同。
输入层到隐藏层权重矩阵:\(U\)向量表示输入层到隐藏层的权重矩阵。
隐藏层到输出层的权重矩阵:\(V\)向量表示隐藏层到输出层的权重矩阵。
上次输出权重矩阵:隐藏层的值\(At\)不仅仅取决于当前这次的输入\(X_t\),还取决于上一次隐藏层的值\(A{t-1}\)。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。 A_t=f(U*X_t+W*A_{t-1})\ \ \ \ \ \ \ (f为激活函数)
输出层:\(o\)向量表示输出层的值。h_t=g(V*A_t )\ \ \ \ \ \ \ \ ( g为激活函数)
特点:
循环神经网络神经元的输出在下一个时间戳直接作用到自身,理论上神经元的输出可以受前面任意多个时刻输入的影响。而在前馈神经⽹络中,信息总是向前传播,从不反向回馈。
理论上循环神经网络可以处理任意长度的输入。
循 ...