机器学习:从输入相关性到技术优化
1. 感知机 3D 函数近似
在机器学习中,我们可以使用感知机对 3D 函数进行近似。代码如下:
purePerceptron3dFunction=Function[{x,y},
CIP‘Perceptron‘CalculatePerceptron3dValue[x,y,
perceptronInfo]];
approximatedFunctionGraphics3D=CIP‘Graphics‘Plot3dFunction[
purePerceptron3dFunction,xRange,yRange,labels];
Show[originalFunctionGraphics3D,approximatedFunctionGraphics3D]
通过上述代码,我们可以看到近似效果较为令人满意,但明显比之前基于 SVM 的结果稍逊一筹。这也说明了在机器学习中,解决问题的方法不止一种,不同的方法各有优劣,选择哪种方法往往取决于个人偏好。
2. 输入组件的相关性
2.1 输入组件的重要性
输入是所有机器学习任务的必要基础,它是一个数学向量,以合适的方式编码信息。从实践者的角度来看,输入应包含所有有用信息,每个组件都应有精确的科学意义。然而,判断单个输入组件对机器学习任务是否真正有意义并非易事。一个最优的输入集应只包含对成功执行机器学习任务必要的组件,排除可能的冗余或无关组件,因为这些组件只会增加输入长度,而对学习效果并无提升。
2.2 鸢尾花分类示例
以鸢尾花分类数据集为例,我们来分析输入组件的相关性。
classificationDataSet=
CIP‘ExperimentalData‘GetIrisFlowerClassificationDataSet[];
CIP‘Graphics‘ShowDataSetInfo[{"InputComponents"},
classificationDataSet];
鸢尾花输入由四个组件组成,分别是萼片长度(组件 1)、萼片宽度(组件 2)、花瓣长度(组件 3)和花瓣宽度(组件 4)。这些量对生物学家来说具有重要意义,是分类的自然基础。
我们使用一个仅包含两个隐藏神经元的小型感知机和一个优化的训练集(训练比例为 24%)进行分类。
numberOfHiddenNeurons=2;
trainingFraction=0.24;
numberOfTrainingSetOptimizationSteps=20;
blackListLength=20;
perceptronTrainOptimization=
CIP‘Perceptron‘GetPerceptronTrainOptimization[
classificationDataSet,numberOfHiddenNeurons,trainingFraction,
numberOfTrainingSetOptimizationSteps,
UtilityOptionBlackListLength -> blackListLength];
CIP‘Perceptron‘ShowPerceptronTrainOptimization[
perceptronTrainOptimization]
通过上述代码,我们可以得到一个令人满意的分类结果,训练集的分类准确率为 100%,测试集的分类准确率为 99.1%。
2.3 确定输入组件的相关性
我们可以通过逐个移除输入组件并重新评估机器学习任务来确定组件的相关性。
perceptronInputRelevanceClass=
CIP‘Perceptron‘GetPerceptronInputRelevanceClass[
trainingAndTestSet,numberOfHiddenNeurons];
CIP‘Perceptron‘ShowPerceptronInputRelevanceClass[
perceptronInputRelevanceClass]
结果显示,移除输入组件列表为
{2,1,3}
,这表明组件 2(萼片宽度)对分类任务的贡献最小,其次是组件 1(萼片长度)和组件 3(花瓣长度),组件 4(花瓣宽度)是最具影响力的组件。
2.4 花瓣宽度的可视化
我们可以将花瓣宽度的值可视化,以更直观地了解其对分类的影响。
classIndex=1;
class1TrainingSet=
CIP‘DataTransformation‘GetSpecificClassDataSubSet[
trainingSet,classIndex];
class1TrainingInputs=class1TrainingSet[[All, 1]];
class1TrainingPetalWidths=class1TrainingInputs[[All, 4]];
class1TestSet=
CIP‘DataTransformation‘GetSpecificClassDataSubSet[
testSet,classIndex];
class1TestInputs=class1TestSet[[All, 1]];
class1TestPetalWidths=class1TestInputs[[All, 4]];
...
labels={"Petal width [mm]","Output",
"Class 1 (black), 2 (blue), 3 (red)"};
argumentRange={0.0,26.0};
functionValueRange={-0.1,1.3};
pointGraphics=CIP‘Graphics‘PlotMultiple2dPoints[
points2DWithPlotStyleList,labels,
GraphicsOptionArgumentRange2D -> argumentRange,
GraphicsOptionFunctionValueRange2D -> functionValueRange]
通过可视化,我们可以看到不同类别的鸢尾花在花瓣宽度上的分布情况,混合颜色表示类别的重叠,这会影响简单清晰的分类。
2.5 移除部分输入组件后的分类结果
移除输入组件 1 到 3 后,我们再次进行感知机拟合和分类。
inputComponentsToBeRemoved={1,2,3};
reducedTrainingSet=
CIP‘DataTransformation‘RemoveInputComponentsOfDataSet[trainingSet,
inputComponentsToBeRemoved];
reducedTestSet=
CIP‘DataTransformation‘RemoveInputComponentsOfDataSet[testSet,
inputComponentsToBeRemoved];
reducedTrainingAndTestSet={reducedTrainingSet,reducedTestSet};
perceptronInfo=CIP‘Perceptron‘FitPerceptron[reducedTrainingSet,
numberOfHiddenNeurons];
CIP‘Perceptron‘ShowPerceptronClassificationResult[
{"CorrectClassification"},reducedTrainingAndTestSet,perceptronInfo]
结果显示,训练集的分类准确率为 91.7%,测试集的分类准确率为 97.4%,仍然保持较高的预测率。这表明花瓣宽度在鸢尾花分类中起着关键作用,而其他组件的信息可以看作是对基于花瓣宽度的分类结果的细化。
2.6 输入组件相关性分析的意义
对输入组件相关性的分析可以为科学量之间的依赖关系提供有价值的见解,有助于科学家更好地理解问题,并激发进一步的研究。如果已知某个输入组件是冗余的,应从一开始就将其排除,因为增加输入组件会增加计算量,并且容易导致过拟合。
3. 模式识别
3.1 数字图像的表示
模式识别是机器学习中最突出和最具挑战性的应用之一,例如生物组织或医学图像的分类。我们以数字灰度图像的人脸检测为例进行讨论。数字图像由像素组成,每个像素包含特定的颜色信息。灰度像素可以有 256 种可能的灰度值,从黑色(值为 0)到白色(值为 255),因此数字图像可以表示为一个数字矩阵。
3.2 人脸检测数据集
我们从 CIP 实验数据包中获取人脸图像分类数据集。
imageClassificationDataSet1=
CIP‘ExperimentalData‘GetFacesWhiteImageDataSet[];
imageInputs1=CIP‘Utility‘GetInputsOfDataSet[
imageClassificationDataSet1];
该数据集包含 18 个输入输出对,分别是 6 只猫、6 只狗和 6 个人的人脸图像。每个输入是一个 30×30 的灰度图像,包含 900 个像素。
3.3 聚类分析
我们对输入进行初始聚类,将其分为 3 类。
numberOfClusters=3;
clusterInfo=CIP‘Cluster‘GetFixedNumberOfClusters[inputs1,
numberOfClusters];
CIP‘Cluster‘ShowClusterResult[
{"EuclideanDistanceDiagram","ClusterStatistics"},clusterInfo]
聚类结果显示,数据集的类分配与检测到的聚类不对应,猫和狗更相似,它们主要聚集在一个聚类中。这表明仅靠聚类无法令人满意地对三种类型的人脸进行分组,因此建议采用监督学习。
3.4 线性 MLR 方法
我们使用线性 MLR 方法进行人脸检测。
mlrInfo1=CIP‘MLR‘FitMlr[classificationDataSet1];
CIP‘MLR‘ShowMlrSingleClassification[
{"CorrectClassification"},classificationDataSet1,mlrInfo1]
结果显示,线性 MLR 方法在该数据集上取得了 100%的正确分类率。但需要注意的是,MLR 方法不易过拟合,因此不需要划分训练集和测试集。不过,线性方法的成功只是一个特例,在一般情况下,非线性机器学习是必要的。
3.5 背景对分类的影响
我们考虑不同背景的人脸图像数据集。当使用白色背景数据集训练的 MLR 预测器对灰色背景数据集进行分类时,预测准确率仅为 33.3%。这是因为机器在训练时学习的是“白色背景上的人脸”,对于“灰色背景上的人脸”则难以识别。
3.6 多背景数据集训练
将白色背景和灰色背景的数据集合并训练 MLR 预测器,然后对黑色背景数据集进行分类,预测准确率达到 100%。这表明不同背景的训练数据可以让机器认识到背景对人脸检测的重要性较低,从而提高对不同背景的容忍度和预测能力。
3.7 图像模糊处理
我们还对训练图像进行模糊处理,然后用模糊图像训练机器,再用原始图像进行测试,结果显示预测准确率仍然为 100%。反之,用原始图像训练,用模糊图像测试,也能取得较好的结果。这表明模式识别需要一个最佳的抽象水平,以实现最准确的预测。
3.8 图像大小缩减
我们尝试减小图像大小,从 30×30 图像缩减到 20×20 图像,甚至 10×10 图像,结果显示在这些较小的图像上,MLR 机器仍然能够实现 100%的正确分类。但当图像大小缩减到 6×6 时,机器开始出现分类错误。这说明在一定范围内减小图像大小可以减少输入组件数量,降低计算量,但过度缩减会导致必要信息丢失,影响预测效果。
3.9 像素相关性分析
对于 10×10 图像的 100 个像素,我们还可以进一步分析每个像素的相关性。
mlrInputRelevanceClass=
CIP‘MLR‘GetMlrInputRelevanceClass[
trainingAndTestSet];
CIP‘MLR‘ShowMlrInputRelevanceClass[
mlrInputRelevanceClass]
结果显示,大部分像素可以被丢弃而不影响预测成功率,只有在消除超过 70%的像素后,预测能力才会下降,大约 30 个合适的像素就足够了。
3.10 图像预处理的重要性
成功的基于机器学习的模式识别需要适当的图像预处理步骤,如分割相关对象、旋转和平移、增强对比度、滤波技术、抑制噪声、减小图像大小、颜色标准化、小波变换、光谱分析等。适当的图像预处理对于减少机器学习任务的计算量至关重要,因为纯图像的输入组件可能多达数百、数千甚至更多,这会使内部计算和整个优化过程变得复杂。因此,良好的数据预处理是成功进行机器学习的关键,遵循“垃圾进,垃圾出”的原则。
以下是一个简单的流程图,展示了模式识别的主要步骤:
graph TD;
A[获取图像数据集] --> B[数据预处理];
B --> C[特征提取];
C --> D[选择分类方法];
D --> E[训练模型];
E --> F[测试模型];
F --> G[评估结果];
4. 技术优化问题
4.1 技术参数的重要性
之前讨论的机器学习问题主要集中在结构问题上,如 SVM 核函数的选择或感知机方法中隐藏神经元的数量。而所有指导不同机器学习方法的技术参数都设置为适当的默认值,这些参数可以选择性地更改,但通常不需要提前指定。然而,在实际应用中,这些技术参数必须针对特定的机器学习任务和方法进行适当调整,否则可能会导致问题复杂化。
4.2 最大迭代次数的影响
以迭代过程中的最大允许迭代次数为例,这个参数至关重要,因为在某些情况下,迭代过程可能会永远运行下去,例如优化过程可能会陷入围绕最优值的振荡或永远趋向于无穷大。因此,在每个迭代步骤中,都会将当前步骤数与最大允许迭代次数进行比较,如果超过上限,则停止整个迭代过程。
4.3 示例分析
我们使用基于真实函数生成的 3D 数据集进行示例分析。
pureOriginalFunction=Function[{x,y},
1.9*(1.35+Exp[x]*Sin[13.0*(x-0.6)^2]*Exp[-y]* Sin[7.0*y])];
xRange={0.0,1.0};
yRange={0.0,1.0};
labels={"x","y","z"};
numberOfDataPerDimension=10;
standardDeviationRange={0.1,0.1};
dataSet3D=CIP‘CalculatedData‘Get3dFunctionBasedDataSet[
pureOriginalFunction,xRange,yRange,numberOfDataPerDimension,
standardDeviationRange];
我们通过改变隐藏神经元的数量,从 2 到 20,并使用训练感知机的 RMSE 作为成功标准进行扫描。
numberOfHiddenNeuronsList=Table[numberOfHiddenNeurons,
{numberOfHiddenNeurons,2,20}];
perceptronInfoList=CIP‘Perceptron‘FitPerceptronSeries[dataSet3D,
numberOfHiddenNeuronsList];
perceptronSeriesRmse=CIP‘Perceptron‘GetPerceptronSeriesRmse[
trainingAndTestSet,perceptronInfoList];
CIP‘Perceptron‘ShowPerceptronSeriesRmse[perceptronSeriesRmse]
扫描结果显示,在增加隐藏神经元数量时,RMSE 先下降,在索引 9 处出现一个小的上升,之后在索引 11 之后,RMSE 不再改善。这可能是由于优化过程陷入困境,或者迭代步骤不足导致的。
4.4 改变最大迭代次数
我们将默认的最大迭代次数增加 10 倍,再次进行扫描。
maximumNumberOfIterations=100000;
perceptronInfoList=CIP‘Perceptron‘FitPerceptronSeries[dataSet3D,
numberOfHiddenNeuronsList,
PerceptronOptionMaximumIterations ->
maximumNumberOfIterations];
perceptronSeriesRmse=CIP‘Perceptron‘GetPerceptronSeriesRmse[
trainingAndTestSet,perceptronInfoList];
CIP‘Perceptron‘ShowPerceptronSeriesRmse[perceptronSeriesRmse]
结果显示,扫描结果略有不同,RMSE 最终随着隐藏神经元数量的增加而下降,出现过拟合现象。但总体而言,之前“12 个隐藏神经元足够”的结论仍然成立,默认的最大迭代次数是在准确性和速度之间的一个可接受的平衡。
4.5 减少最大迭代次数
如果减少默认的最大迭代次数,会进入一个危险区域。
maximumNumberOfIterations=1500;
perceptronInfoList=CIP‘Perceptron‘FitPerceptronSeries[dataSet3D,
numberOfHiddenNeuronsList,
PerceptronOptionMaximumIterations ->
maximumNumberOfIterations];
perceptronSeriesRmse=CIP‘Perceptron‘GetPerceptronSeriesRmse[
trainingAndTestSet,perceptronInfoList];
CIP‘Perceptron‘ShowPerceptronSeriesRmse[perceptronSeriesRmse]
减少最大迭代次数可能会导致优化过程无法收敛到较好的结果,从而影响模型的性能。
以下是一个表格,总结了不同最大迭代次数下的扫描结果:
| 最大迭代次数 | 最佳训练集回归索引 | RMSE 变化趋势 | 计算时间 |
| — | — | — | — |
| 默认(10000) | {11} | 先下降,索引 9 处上升,索引 11 后不再改善 | 适中 |
| 增加 10 倍(100000) | {19} | 最终下降,出现过拟合 | 较长 |
| 减少(1500) | - | 可能无法收敛 | 较短 |
综上所述,在机器学习中,不仅要关注结构问题,还要重视技术参数的优化,以确保模型的性能和效率。
4.6 技术参数调整的权衡
在调整技术参数时,需要在准确性和计算效率之间进行权衡。以最大迭代次数为例,增加最大迭代次数可能会提高模型的准确性,但会显著增加计算时间;而减少最大迭代次数虽然可以缩短计算时间,但可能会导致模型无法收敛到较好的结果。因此,在实际应用中,需要根据具体情况选择合适的技术参数值。
4.7 技术优化的通用策略
对于技术优化问题,以下是一些通用的策略:
1.
参数扫描
:对技术参数进行系统的扫描,例如在一定范围内改变最大迭代次数、学习率等参数,观察模型性能的变化,从而找到最优的参数组合。
2.
交叉验证
:使用交叉验证的方法来评估不同参数设置下模型的性能,避免过拟合和欠拟合问题。
3.
先验知识
:结合领域知识和经验,对技术参数进行合理的初始设置,减少不必要的参数调整。
4.
自动化调参
:利用自动化调参工具,如网格搜索、随机搜索或贝叶斯优化等,来寻找最优的参数组合,提高调参效率。
4.8 技术优化的重要性总结
技术优化对于机器学习的成功至关重要。合理调整技术参数可以提高模型的性能、减少计算成本,并避免过拟合和欠拟合问题。在实际应用中,需要综合考虑结构问题和技术问题,不断尝试和优化,以达到最佳的机器学习效果。
以下是一个流程图,展示了技术优化的主要步骤:
graph TD;
A[确定技术参数范围] --> B[参数扫描];
B --> C[使用交叉验证评估性能];
C --> D[选择最优参数组合];
D --> E[训练模型];
E --> F[测试模型];
F --> G[评估结果];
G --> H{是否满意};
H -- 是 --> I[结束];
H -- 否 --> A[重新确定参数范围];
5. 总结与建议
5.1 输入组件相关性总结
- 输入组件的相关性分析可以帮助我们理解科学量之间的依赖关系,为问题的解决提供有价值的见解。
- 在选择输入组件时,应尽量排除冗余或无关的组件,以减少计算量和避免过拟合。
- 通过逐步移除输入组件并重新评估模型性能,可以确定每个组件的相关性,找到最有影响力的输入组件。
5.2 模式识别总结
- 模式识别是机器学习中的重要应用,需要适当的图像预处理步骤来提高模型的性能。
- 不同的分类方法在模式识别中具有不同的效果,应根据具体问题选择合适的方法。
- 训练数据的多样性对于提高模型的泛化能力至关重要,应尽量包含不同背景、不同形态的样本。
5.3 技术优化总结
- 技术参数的调整对于机器学习的成功至关重要,需要在准确性和计算效率之间进行权衡。
- 采用参数扫描、交叉验证、先验知识和自动化调参等策略,可以有效地优化技术参数。
- 不断尝试和优化技术参数,结合结构问题的解决,才能达到最佳的机器学习效果。
5.4 综合建议
- 在进行机器学习任务时,应首先对数据进行充分的预处理,包括数据清洗、特征提取和归一化等操作,以提高数据质量。
- 对于结构问题,如模型选择和参数设置,应结合领域知识和经验进行合理的选择。
- 在调整技术参数时,应采用系统的方法进行优化,避免盲目尝试。
- 定期评估模型的性能,根据评估结果进行调整和优化,不断提高模型的准确性和泛化能力。
以下是一个表格,总结了不同方面的关键要点和建议:
| 方面 | 关键要点 | 建议 |
| — | — | — |
| 输入组件相关性 | 分析组件相关性,排除冗余组件 | 进行逐步移除组件评估,结合领域知识选择组件 |
| 模式识别 | 适当预处理,选择合适分类方法,增加训练数据多样性 | 采用多种预处理技术,尝试不同分类方法,收集多样样本 |
| 技术优化 | 权衡准确性和计算效率,合理调整技术参数 | 采用参数扫描、交叉验证等策略,使用自动化调参工具 |
通过对输入组件相关性、模式识别和技术优化问题的深入探讨,我们可以更好地理解机器学习的原理和方法,并在实际应用中取得更好的效果。在未来的研究和实践中,我们应不断探索和创新,以应对日益复杂的机器学习挑战。
超级会员免费看
4152

被折叠的 条评论
为什么被折叠?



