170 2016,52(18) Computer Engineering and Applications 计算机工程与应用
?{x1 x2 x10} 。这种编码缩短了染色体的长度,能够快速性并且提高聚类质量。 高效地求解这类复杂的聚类问题。
4.1 K 均值聚类算法
步骤2 初始化种群。
K 均值算法是典型的基于距离的聚类算法,即认为两
从所有样本中随机抽取 k 个点作为 k 个聚类的中
个对象的距离越近,其相似度就越大[17]。算法最终将所有心,重复进行 N 次,共生成 N 个初始个体,由此产生对象分为 k 个簇,使簇内对象具有较高的相似度,而各规模为 N 的第一代种群。
簇之间相似度较低。
步骤3 按照图1 的 K 均值算法流程对每个个体进聚类问题可以描述为:n 个点 x1 x2 xn ,按照相似 行 K 均值聚类。
性将其划分为 k 个集合 G1 G2 Gk ,满足:
步骤4 计算群体各个体的适应度。
(1)Gi ? φ i ? 1 2 k
最准确的聚类结果要求类内相似度高并且类之间相
(2)Gi Gj ? φ ; i j ? 1 2k ; i ? j
异度高。现有大多数研究都只以较高的类内相似度作为
k
(3) Gi ?{x1 x2 xn}
衡量指标,虽有不错的效果,但在一些情形下效果不是i ? 1
很理想。本文采用类内相似和类间相异结合的方式,定同时使得总的类内离散度和:
义适应度函数为:
J?
n c
2
c
?x?B
i j
(8) c
i ? 1
J ??J c
达到最小。其中 cj 为第i 个样本对应的聚类中心, xi ? cj
其中 B?c
?c ? c,B(10) ij c 为各聚类中心之间的距离
为第
i 个样本到对应聚类中心的欧氏距离。
1 j ? i k
聚类的划分采用最近邻法则,若 xi、cj 满足:
和;Jc 为公式(8)表示的类内离散度和。 Jc 越小表示
xi ? cj ? min xi ? cm m ? 1 2k 类内越紧凑,B(9) c 越大表示类间差异度越大,J 越大适应则 xi 属于第 j 类。
度越高,聚类效果越好。
K 均值算法的流程如图1 所示。
步骤5 按照公式(3)对种群进行选择操作、公式
(4)对种群进行交叉操作、公式(5)对种群进行变异操
开始
作,产生新一代群体。
步骤6 重复步骤3~步骤5,直到最优个体的适应度
任意选择 K 个点作为初始聚类中心
和群体平均适应度趋于稳定或者迭代次数达到预设代
利用公式(9)进行聚类划分 数 iter 。
每一个聚类重新计算该类的质心
(类内所有点的均值) 5
基于改进遗传算法的股票筛选
输入 聚类后的股票样本数据集,设置遗传算法参数:种
Y 群规模 N ? 50 ,基准交叉概率 Pc1 ? 0.6 ,基准变异概率
聚类中心是否变化
P
m1 ? 0.05 ,迭代代数 iter ? 100 ,调整系数 k1 ? k2 ? 0.6、
N
结束
k
3 ? k4 ? 0.05 ,适应度函数参数 h1 ? 100 和 h2 ? 2 。
图 1 K 均值算法流程图
输出 选取最终群体中适应度值最高的个体,即为选
股模型的最优参数。
4.2 基于遗传算法改进的K 均值聚类算法设计
步骤1 染色体编码。
输入 股票样本数据集,设置遗传算法参数:聚类个数 k
采用浮点数编码将10 个财务指标参数作为筛选条?
3 ,种群规模 N ? 30 ,交叉概率 Pc ? 0.6 ,变异概率
件编码为染色体,即{ p1 p2 p10} 。
P
m ? 0.05 ,迭代代数 iter ? 100 。
步骤2 初始化种群。
输出 选取最终群体中适应度值最高的个体,输出聚从所有样本中随机抽取 N 个样本,每个样本的 10
类结果。
个财务指标组成一个初始个体,由此产生规模为 N 的第
步骤1 染色体编码。
一代种群。
通常聚类问题的数据集规模远大于聚类数目,聚类算步骤3 以群体中各个体为筛选条件进行股票筛选,计
法的结果是求得聚类中心,所以将各个聚类中心编码为染
算各个体的适应度。
色体。每个聚类中心涉及10 个财务指标属性,则染色体长度为10 ? k ,采用浮点数编码为:{X1 X2 Xk} , Xk
本算法的目的是得出最佳的股票选择模型(即筛选条件),所以选出的股票组合平均回报率越高,模型效果越好,适应度就应该越高,因此可以选择满足筛选条件
戎 容,吴
萍:基于遗传算法的股票市场选择模型
2016,52(18) 171
表2 训练样本
股票名称
每股收 总资产净 益/元
经营现金
销售净 净资产收 利率/%
回报率/%
净利润增 总资产增 长率/%
应收账款 周转率/次
存货周 转率/次
资产负 债率/%
净流量对 负债比率/% -0.150 -0.024 -0.025
利润率/% 0.172 7 0.643 1 0.256 4
益率/% 0.28 0.30 0.88
长率/% 9.944 7 9.917 9 7.892 3
四方股份 东方电子 宝胜股份
0.022 3 0.004 5 0.035 0
1.523 3 4.822 2 0.887 7
-44.810 0 4.016 1 4.293 5
0.243 0 0.482 7 0.701 0
0.405 1 0.448 5 2.272 4
30.191 37.792 70.208
-0.10 0.07 0.09
的股票的平均回报率作为个体的适应度。但是考虑到选择运算采用轮盘赌方法,平均回报率有可能是负值,而选择运算采用轮盘赌方法不允许适应度出现负值,所以不能直接将平均回报率作为个体适应度,必须先进行转化。定义适应度函数为:
h
1
F ??h ? R
(11) 2
?n
ci Si[10]
其中 R 为平均回报率( R ??i ? 1
n
?
c
),当没有股票满
i
i ? 1
足筛选条件时 R 无效,这是最差的个体,所以此时 R 取一个较大的负值(如-99)使得 F 为一个极小的值,以保证在遗传算法的选择运算中这个个体不容易遗传到下一代中。 h1 为常数 (h1 ? 0) ,h1 越大不同回报率对应的适应度差异越大。 h2 也为常数,h2 大于各样本中回报率的最大值以保证 h2 ? R ? 0 ,从而适应度 F ? 0 。
步骤4 按照公式(3)对种群进行选择操作。 步骤 5 根据公式(6)定义的改进自适应交叉概率,
采用公式(4)定义的算术交叉方式对种群进行交叉操作,产生新一代群体。
步骤 6 根据公式(7)定义的改进自适应变异概率,
采用公式(5)定义的均匀变异方式对种群进行变异操作,产生新一代群体。
步骤7 重复步骤3~步骤6,直到最优个体的适应度
和群体平均适应度趋于稳定或者迭代次数达到预设代数 iter 。
6
实验与结果分析
根据财务报表统计50 家上市公司2014 年一季度的十项财务指标,统计 2014 年一季度第一个交易日的股票开盘价和2014 年一季度最后一个交易日的股票收盘价格,计算其回报率,组成训练样本数据,数据如表2 所示(限于文章的篇幅,仅给出了部分股票的数据)。资料来源于新浪财经。
训练样本分别使用未改进的和基于遗传算法改进的
K 均值算法进行聚类分析,共进行10 次实验,运行情况如表
3 所示。
从表3 可以看出,使用遗传算法改进的算法全部取得全局最优解,有效克服了传统 K 均值算法不稳定的缺陷。改进的 K 均值算法结果比较
聚类算法
最优解(类内 平均值(类内 最优解
离散度和 Jc ) 离散度和 Jc ) 次数 K 均值
162 361.38 168 180.09 6 遗传算法改进的 K 均值
162 361.38
162 361.38
10 训练样本通过基于遗传算法的 K 均值聚类算法聚类为
3 类,聚类结果如下:
第一类:{湘电股份,四方股份,泰豪科技,南洋股
份,国轩高科,深圳惠程,太阳电缆,思源电气,永大集团,中元华电,九洲电气,南风股份,雅百特,茂硕电源,经纬电材
}。
第二类:{通达股份,东方电子,宝胜股份,上海电
气,东方电气,特变电工,卧龙电气,恒顺众昇,中超控股,万马股份,三变科技,上风高科,正泰电器,天顺风能,金风科技,汉缆股份,泰胜风能,摩恩电气,沃尔核材,奥特迅,金杯电工,金利华电,和顺电气,许继电气,麦迪电气,特锐德,中能电气,风范股份,平高电气,森源电气,北京科锐,易世达,科泰电源,置信电气}。
第三类:{华仪电气}。
运用 PCA(Principal Component Analysis)算法将样
本数据降维,在二维坐标系中,样本数据点分布及聚类结果如图2 所示。
40 1 20 2
3
0 2
X
-20
-40
-60 200060200 0 800 0 400 0 0 200 400
11
- - - - - -
X1
图2 训练样本聚类结果
分别计算三类股票的各项财务指标平均值,结果如表4 所示。
从聚类结果可以看出,第一类股票的净利润增长率指
标平均值为负值,其他各项正指标也较二、三两类有较大的差距。很明显这类股票在市场投资中为垃圾股,具有较大的投资风险,所以从样本中剔除第一类中的所有股票。
172 2016,52(18)
Computer Engineering and Applications 计算机工程与应用
表4
各类股票财务指标平均值
分类
每股收 总资产净 销售净 净资产收 净利润增 总资产增 应收账款 存货周 资产负 经营现金净流量
益/元
利润率/%
利率/%
益率/%
长率/%
长率/%
周转率/次
转率/次
债率/%
对负债比率/%
第一类 0.02 0.29 4.88 0.45 -63.96
7.32 0.40 0.64 32.22 -0.08 第二类 0.07 0.89 7.69 1.44 39.65 16.25 0.56 0.83 38.82 -0.08 第三类
0.05
0.61 7.61 1.45
1 034.30
24.86
0.21 0.85
55.58
-0.05
为了进一步验证该模型的可靠性和准确性,训练样经过第一步聚类筛选后剩余的训练样本分别使用未改本外还统计了50 家上市公司2014 年二、三、四季度的进的遗传算法和改进的遗传算法进行基本面选股,共进行相关财务指标和回报率,统计方法同上,组成验证样本数10
次实验,运行情况如表5 所示。
据。数据来源于新浪财经。图 4 显示了验证样本的股票
表5 改进和未改进的遗传算法结果比较
选择结果。
浮点数编码
最优解
最差解
最优解 收敛到最优解的
60.00
的遗传算法 (适应度) (适应度) 次数
平均迭代次数
50.00
未改进算法 408.163 289.855 3 56.8 40.00
改进的算法
408.163
327.860
7
38.1
/% 30.00
回
报率
从表 5 可以看出,使用改进的算法效果明显,最优20.00 10.00 解次数增多而收敛到最优解的迭代次数减少,说明改进
0.00
-10.00
算法更容易跳出局部最优解,收敛速度更快。
-20.00 2014 年二季度 2014 年三季度 2014 年四季度
利用改进的遗传算法进行基本面选股,得出选股模
(总股票数50,(总股票数50,(总股票数50, 型的最优参数为:(0.005 7,0.074 6,1.847 4,0.599 9,0,
选择股票数8) 选择股票数4)选择股票数13)
选择股票平均回报率/% 22.13 44.50 48.15 8.382 4基准回报率/% 7.22 33.90 36.00
,0.007,0.008 5,60.400 7,-0.001 6)。评价该股
同期上证综指回报率/% -3.02 11.92 53.15 票选择模型是否有用,关键是选出的股票的回报率如何,同期深证成指回报率 /% -9.16 -0.04 36.26
通常的做法是以基准回报率、同期上证综指回报率和同期图4 验证样本选择结果
深证成指回报率为参照物,将选择出的股票的平均回报率好的效果,选出股票的平均回报率全部高于基准回报与其对比[18]。基准回报率是指样本中全部股票的平均回报率。与同期上证综指和深证成指回报率相比较,除了四率。图3 显示了训练样本的股票选择结果。
季度数据略低于上证综指回报率,其他数据也都处于较
80.00
高水平。
70.00
60.00 /% 50.00
7 结束语
回40.00
报本文从股票的基本面出发,利用遗传算法进行股票率 30.00
20.00 选择。首先基于遗传算法的聚类分析,从上市公司的盈 10.00
0.00
利能力、成长能力和营运发展水平等方面为初步评估相
-10.00
关股票的优劣提供了很好的依据。然后利用遗传算法较
-20.00 选择股票
同期上证 同期深证
强的全局搜索能力解决最优解问题,得出最佳的股票筛
平均回报率 基准回报率
综指回报率 成指回报率
2014 年一季度
选模型参数。实验证明,使用遗传算法进行基本面选股(总股票数50, 75.50% 10.48%-3.73% -11.06%
是切实可行的。由此可见,遗传算法能够为股票投资者 选择股票数2)
图3 训练样本选择结果
提供科学的投资决策。
从图3 可以看出,在训练样本中选择模型选出的股
票组合的回报率明显超过基准回报以及同期上证综指和深证成指回报率。
从图
4 可以看出,在验证样本中选择模型依然有很 (下转178 页)