暑假实习报告.docx
- 文档编号:23723171
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:16
- 大小:124.09KB
暑假实习报告.docx
《暑假实习报告.docx》由会员分享,可在线阅读,更多相关《暑假实习报告.docx(16页珍藏版)》请在冰豆网上搜索。
暑假实习报告
合肥学院计算机科学与技术系
认知实习报告
系别:
计算机科学与技术
专业:
计算机科学与技术
班级:
10级计本<3>班
姓名:
阮广杰
学号:
1004011004
成绩:
年月日
认知实习报告
根据合肥学院人才培养方案中的第五学期认知实习教学大纲的要求,我于2012年6月18号至2012年9月1日在校实习,进行“冰箱泄漏热负荷及性能预测”项目研究。
一、项目简介
项目名称:
冰箱泄漏热负荷及性能预测研究
委托方:
合肥美菱股份有限公司
技术目标和内容:
1、对已有产品漏热测试数据进行分析处理,拟合出冰箱保温层和门封泄漏热负荷的计算方法;
2、根据冰箱泄漏热负荷、制冷系统设计、零部件选型,研究制定出冰箱性能(耗电量、开机率等)预测方法。
二、认知实习经历
项目需要大量有关聚类和分类的知识基础,我负责的是K-means算法、支持向量机(SupportVectorMachine,SVM)的研究。
1、K-means算法的学习
MacQue既在1967年提出的K-means算法,是一种被广泛应用于科学研究和工业应用中的经典聚类算法。
K-means算法的核心思想是把n个数据对象划分为k个聚类,使每个聚类中的数据点到该聚类中心的平方和最小。
K-means算法是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。
K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最有分类,使得评价指标J最小。
算法采用误差平方和准则函数作为聚类准则函数。
2、K-means算法的研究
我们经常接触到的聚类分析,一般都是数值聚类,一种常见的做法是同时提取N种特征,将它们放在一起组成一个N维向量,从而得到一个从原始数据集合到N维向量空间的映射——总是需要显式地或者隐式地完成这样一个过程,然后基于某种规则进行分类,在该规则下,同组分类具有最大的相似性。
假设我们提取到原始数据的集合为(x1, x2,…, xn),并且每个xi为d维的向量,K-means聚类的目的就是,在给定分类组数k(k ≤ n)值的条件下,将原始数据分成k类 S = {S1, S2, …, Sk},在数值模型上,即对以下表达式求最小值:
(1)
这里μi 表示分类Si 的平均值。
设我们一共有N个数据点需要分为K个cluster簇,k-means要做的就是最小化
(2)
这个函数,其中
在数据点n被归类到clusterk的时候为1,否则为0。
直接寻找
和
来最小化
并不容易,不过我们可以采取迭代的办法:
先固定
,选择最优的
,很容易看出,只要将数据点归类到离他最近的那个中心就能保证
最小。
下一步则固定
,再求最优的
。
将
对
求导并令导数等于零,很容易得到
最小的时候
应该满足:
(3)
亦即
的值应当是所有clusterk中的数据点的平均值。
由于每一次迭代都是取到
的最小值,因此
只会不断地减小(或者不变),而不会增加,这保证了k-means最终会到达一个极小值。
虽然k-means并不能保证总是能得到全局最优解,但是对于这样的问题,像k-means这种复杂度的算法,这样的结果已经是很不错的了。
K-means算法流程如下,流程如图1所示:
(1)从n个数据对象中任意选取k个对象作为初始的聚类中心。
(2)分别计算每个对象到各个聚类中心的距离,把对象分配到距离最近的聚类中。
(3)所有对象分配完成后,重新计算k个聚类的中心。
(4)与前一次计算得到的k个聚类中心比较,如果聚类中心发生变化,转
(2),否则转(5)。
(5)输出聚类结果。
图1K-means流程图
虽然K-means易于实现,但存在如下的缺点:
(1)在K-means算法中K是事先给定的,这个K值的选定是非常难以估计的。
很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。
(2).K-means算法是动态聚类,具有一定的自适应性,但是结果容易收到类别个数和出师聚类中心的影响,因此聚类结果取决于K值和初始聚类中心的选择。
(3).从K-means算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。
(4).不能处理噪声数据和孤立点,不适合发现非凸面形状的簇。
K-means的提出较早且易于理解和实现,但是由于上诉的不足,所以在实际应用中往往会在传统K-means上加以改进。
比如通过加权、主成成分分析、近邻比较等。
具体的应用包括:
模式识别,空间数据分析(通过聚类特征空间创建GIS中的主题映射,探测空间簇,用空间数据挖掘解释它们),图像处理(例如遥感图像处理),经济学(特别指市场研究),网络(文档分类,对web日志数据进行聚类以发现相似访问模式组),商务(帮助市场分析人员从客户基本库中发现不同的客户群,并且用购买模式来刻画不同的客户群的特征),土地使用(在一个地球观测数据库中识别相似土地使用的地区),保险业(汽车保险单持有者的分组),城市规划(房子的类型,价值和地理分布来识别房子组),生物学(用于推导植物和动物的分类,对基因进行分类)等。
但是应用K-means的领域有一个共同的特征,那就是K值可以借助经验或者一些数学工具给出以明确且上下限相差较小的范围。
3、K-means算法的设计
(1)数据结构
typedefstructsrc{
doubledt[M];
}src;
intk;//分类个数
intn=0;//数据行数
int*iindex;//随机产生质心序号
src*index;//存放质心
src*indexback;//备份index里的数据
int*sumi;//每个质心簇存放的个数
src*data;//存放原始数据
src**group;//存放聚类后的数据,二维
(2)算法设计
voidInitializ();//读入数据并进行质心初始化
voidRandomnum();//第一次随机产生质心组
voidCopyIndex();//备份质心组,将本次产生的质心记录以和下次迭代的质心比较,当两次质心完全一致时,认为已经聚类完毕。
voidCreatgroup();//为每一个数据分配组
voidGroup(intti,srcval);//
intComIndex();//比较两次质心,如果完全一致结束迭代
voidIndexChange();//每次分配数据后改变质心组
for(i=0;i { s=(double*)malloc(sizeof(double)*M); for(j=0;j { for(g=0;g } for(g=0;g for(g=0;g } voidWriten();//输出 程序主体: intmain() { intflag=1; intmm=0; Initializ(); while(flag) { Creatgroup(); IndexChange(); flag=ComIndex(); CopyIndex(); } Writen(); return0; } (3)调试与分析 K-means的聚类效果受初始值影响较大,有些时候准确率可达80%以上,然而有时候只有50%,而且对于不确定K值的数据,需要反复实验才能确定聚类集。 4、支持向量机(SupportVectorMachine,SVM)算法的学习 支持向量机(SupportVectorMachine,SVM)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。 它是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳折衷,以期获得最好的推广能力,其主要四象是针对两类分类问题,在高维空间中寻找一个超平面作为两类的分割,以保证最小的分类错误率。 SVM一个重要的优点是可以处理线性不可分的情况。 SVM在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。 学习样本是实际模式的抽样或特例,工作中的实际模式可能超过学习样本的分布范围。 如果能够预测到实际模式的分布,并且根据其分布确定分类函数,我们称之为“预测最优”。 但实际上是很难做到的,无论我们得到多大规模的样本都总是实际问题的抽样或特例,以这些数据所做的任何估计都只是以局部推测全局。 “支持向量机”取两类样本之间最大边带的中心为分类函数,显然是对现有学习样本的最佳分类。 尽管这样的分类函数未必是“预测最优”,但这种方法比器硬“限幅函数单个神经元”只能得到一个可行的分类函数来说,有更强的合理性。 我们称支持向量机获得的分类函数具有“结构最优”性。 Machine的翻译是机器,在英文国家通常会用来表示算法的意思,也喻指一个解决问题的机器。 向量就是指一个数据集的一个元数据,一般包括许多属性值,SVM是通过寻找超平面实现分类而支持向量就是指支撑起这个超平面的向量,SVM的最终分类规则并不会将全部数据集的数据都用上,而是挑选一些特殊的支持向量支撑起超平面,然后用这个超平面划分未知分类的数据集。 在一组二维数据中,划分界限的超平面是一条曲线,在三维数据中,划分界限的超平面是一个曲面,更高维度的数据依次类推,超平面并不一定是二维的曲面。 SVM分类需要一个已知分类信息的数据集,包括数据属性以及所属类别,称这个数据集为训练集。 5、支持向量机(SupportVectorMachine,SVM)算法的研究 SVM通过寻找一个超平面划分数据集,故而最初的SVM只能对两类数据进行处理,对于超过两类的需求,一般通过下列方法解决: (1)一对多: 在第k类和k-1类之间构建超平面,系统仅创建k个SVM,每个SVM将一个类从整体分离。 (2)一对一: 对任意两个类之间构建超平面,也就是对k个分类的训练集进行两两区分。 (3)SVM决策树: 将SVM和二叉决策树想结合,构成多类分类器。 首先讨论对于线性可分的数据,假设存在训练样本(x1,x1),···,(xl,yl),x∈Rn,y∈{+1,-1},l为样本数,n为输入维数,在线性可分的情况下就会有一个超平面是的这两类样本完全分开,描述为 (ω·x)+b=0(4) 分类如下 ω·xi+b>=0,yi=+1 ω·xi+b<0,yi=-1(5) ω是超平面的法线方向,ω/||ω||为单位法向量,其中||ω||是欧几里得摸函数。 如果训练数据可以无误差地被划分,以及每一类数据与超平面距离最近的向量与超平面之间的距离最大,则称这个超平面为最优超平面,如图2。 图2最大距离 图3样本分类 如图3所示,有一堆训练数据的正负样本,标记为: (6) 假设有一个超平面H: ,可以把这些样本正确无误地分割开来,同时存在两个平行于H的超平面H1和H2: (7) 使离H最近的正负样本刚好分别落在H1和H2上,这样的样本就是支持向量。 那么其他所有的训练样本都将位于H1和H2之外,也就是满足如下约束: (8) 写成统一的式子就是: (9) 而超平面H1和H2的距离可知为: SVM的任务就是寻找这样一个超平面H把样本无误地分割成两部分,并且使H1和H2的距离最大。 要找到这样的超平面,只需最大化间隔Margin,也就是最小化 。 于是可以构造如下的条件极值问题: (10) 对于不等式约束的条件极值问题,可以用拉格朗日方法求解。 而拉格朗日方程的构造规则是: 用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去。 于是得到拉格朗日方程如下: (11) 其中: (12) 那么我们要处理的规划问题就变为: (13) 上式才是严格的不等式约束的拉格朗日条件极值的表达式。 对于这一步的变换,很多文章都没有多做表述,或者理解有偏差,从而影响了读者后续的推演。 在此我将详细地一步步推导,以解困惑。 (13)式是一个凸规划问题,其意义是先对α求偏导,令其等于0消掉α,然后再对w和b求L的最小值。 要直接求解(13)式是有难度的,通过消去拉格朗日系数来化简方程,对我们的问题无济于事。 所幸这个问题可以通过拉格朗日对偶问题来解决,为此我们把(13)式做一个等价变换: 上式即为对偶变换,这样就把这个凸规划问题转换成了对偶问题: (14) 其意义是: 原凸规划问题可以转化为先对w和b求偏导,令其等于0消掉w和b,然后再对α求L的最大值。 下面我们就来求解(14.)式,为此我们先计算w和b的偏导数。 由(11)式有: (15) 为了让L在w和b上取到最小值,令(7)式的两个偏导数分别为0,于是得到: (16) 将(16)代回(11)式,可得: (17) 再把(17)代入(14)式有: (18) 考虑到(16)式,我们的对偶问题就变为: (19)上式这个规划问题可以直接从数值方法计算求解。 需要指出的一点是,(10)式的条件极值问题能够转化为(13)式的凸规划问题,其中隐含着一个约束,即: (20) 这个约束是这样得来的,如果(11)和(13)等效,必有: 把(11.)式代入上式中,得到: 化简得到: (21) 又因为约束(17)式和(13)式,有: 所以要使(21)式成立,只有令: ,由此得到(12)式的约束。 该约束的意义是: 如果一个样本是支持向量,则其对应的拉格朗日系数非零;如果一个样本不是支持向量,则其对应的拉格朗日系数一定为0。 由此可知大多数拉格朗日系数都是0。 一旦我们从(19)式求解出所有拉格朗日系数,就可以通过(16)式的 计算得到最优分割面H的法向量w。 而分割阈值b也可以通过(20)式的约束用支持向量计算出来。 这样我们就找到了最优的H1和H2,这就是我们训练出来的SVM。 当遇到线性不可分的情况时,需要做一些其他的处理。 举一个二维的例子显然不能找到一个点把红的和黑的分开但是我们可以将一维扩展成二维,将线性扩展成非线性: 做一个二次曲线g(x)发现红色的部分g(x)<0其他部分>0显然g(x)就是我们想要的对于y=g(x)的一般表示就是x的0次项+一次项+二次项我们用线性代数里面的写法: (22) X的维度增加了这种向更高维的映射可以把非线性转化为线性而重要的是本来x就是一个很高维数的东西再映射到更高维会导致计算机的悲剧,于是想要简化他这里核函数就出现了而核函数就是一种接受低维空间的输入值,转换成为高维空间的一个内积值,本来高维数的东西就变成了一个小小的内积而内积是一维的、有了这个K(w,x)之后我们也就用不着费力找那个映射关系,直接拿低维的输入往g(x)里面代就可以了(k的存在在泛函里面有证明)常用的核函数: 多项式核函数、径向基函数、多层感知机、动态核函数。 三、总结 整个暑假期间,我留校学习有关聚类和分类的有关算法。 最开始研究的是K-means算法,K-means算法思想易于理解,从接触到编写完成代码花费约两周。 期间,关于多维数据的簇内的平均距离有过一些迷惑,一开始的实验采用的实验数据是一维的,平均距离只需通过求和在除以总数即可,对于多维的数据,距离的定义约有三四种,最终通过比较,选用以欧几里得距离来定义。 接下来学习SVM理论遇到了很多困难,当我刚刚阅读过SVM的一些理论时曾认为应该很容易实现,然而最终花费了大半个暑假只能算是初步理解。 SVM是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,通过寻找超平面来解决问题,然而寻找超平面的方法目前常用的已经超过三种,每种都学要大量的数学知识支撑。 我学习的是利用拉格朗日因子解决线性问题,通过在网络上大量的查找资料、向老师咨询,学习线性可分下超平面方程,尤其在当中解决一个非线性规划的方程的解,不断查找任何有关的资料。 SVM让我学习了很多,最开始的VC维理论以及结构风险分析,由于概念的新奇,反复体会方才有些所得。 中途求解方程更是翻阅了许多的数学类书籍,包括高等数学、线性代数、概率论,还有没学习过的凸包、线性二次规划求解、非线性二次规划求解。 这次暑假留校学习,对我而言是个挑战,很多新的知识以及以学习过的知识整合。 对于大一、大二所学习到东西好像一条线串起来,从基础的C语言知识,到设计数据结构、确定算法、还有各种数学理论支撑,真的感到一种充实。 同时也发现到,要想将平时在课堂上学习到的知识应用到现实,真的还有很多的距离,需要灵活的组合各种知识,靠单一的某门课是无法胜任解决现实问题的任务,缺少了任何一方面的知识,都是能望洋兴叹。 我也发现了自己在数序方面的弱项,SVM的方程让我吃够了苦头,不仅仅是入门的线性超平面方程还有非线性里的核函数以及算法方程优化。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 暑假 实习 报告