用R语言实现遗传算法

Python09

用R语言实现遗传算法,第1张

模式识别的三大核心问题包括:

特征选择 特征变换 都能够达到降维的目的,但是两者所采用的方式方法是不同的。

特征提取 主要是通过分析特征间的关系,变换原来特征空间,从而达到压缩特征的目的。主要方法有:主成分分析(PCA)、离散K-L变换法(DKLT)等。

特征选择 选择方法是从原始特征集中挑选出子集,是原始特征的选择和组合,并没有更改原始特征空间,特征选择的过程必须确保不丢失重要特征。主要方法有:遗传算法(GA)、统计检验法、分支定界法等。

这里主要讲讲特征选择中 遗传算法 以及它的R语言实现(因为要写作业,虽然不一定写对了)。

遗传算法受进化论启发,根据“物竞天择,适者生存”这一规则,模拟自然界进化机制,寻找目标函数的最大值。

采用遗传算法对男女生样本数据中的身高、体重、鞋码、50m成绩、肺活量、是否喜欢运动共6个特征进行特征选择。

由于有6个特征,因此选用6位0/1进行编码,1表示选中该特征。

适应度函数的实现

示例

结果如下

有什么不对的地方欢迎大家在评论区指出。

有两种方法,一种是用matlab自带的遗传算法工具箱;还有一种是自己编写遗传算法解决问题。第二种方法的话,网上可以找到很多遗传算法的matlab代码,我也可以提供。第一种的话,有一定的局限性。

tags: R

Categories: 遗传参数

···

param= function(){

GA=as.matrix(read.table("GA.csv",h=F,sep=","))

PE=as.matrix(read.table("PE.csv",h=F,sep=","))

Parity3PE =as.matrix(read.table("Parity3PE.csv",h=F,sep=","))

R=as.matrix(read.table("R.csv",h=F,sep=","))

P1 = as.matrix(GA+PE+Parity3PE+R)

h2 = as.matrix((diag(GA)/diag(P1)))

r =as.matrix(diag(GA+PE+Parity3PE) / diag(P1))

diagGC=diag(x = 1, nrow(GA), ncol(GA), names = TRUE)

diag(diagGC) <- sqrt(diag(GA))

GC=solve(diagGC) % % GA % % solve(t(diagGC))

diagPEC=diag(x = 1, nrow(PE), ncol(PE), names = TRUE)

diag(diagPEC) <- sqrt(diag(PE+Parity3PE))

PEC = solve(diagPEC)% % (PE+Parity3PE) % % solve(t(diagPEC))

diagPC=diag(x = 1, nrow(P1), ncol(P1), names = TRUE)

diag(diagPC) <- sqrt(diag(P1))

PC = solve(diagPC)% % P1 % % solve(t(diagPC))

return(list(h2,r,GC,PC))

}

···

param()