登录
首页精彩阅读用R语言建立学生的学习表现和性格特征数据模型
用R语言建立学生的学习表现和性格特征数据模型
2017-02-26
收藏

R语言建立学生的学习表现和性格特征数据模型

一、项目介绍:

方法包括以下步骤

S1:将个体表现数据输入到数据库;

S2:建立学习者的学习表现数据库和性格特征数据库;

S3:建立学习者的学习表现数据模型和性格特征数据模型;

S4:使用数据算法计算学习表现数据;

S5:输出个体性格特征

步骤(S1)中的个体表现数据为诸如以下类型且不局限于以下类型的个体表现:

旷课、请假、迟到、早退;

课堂纪律、上课说话、上课玩手机、上课吃东西、上课看与学科内容无关的书、上课期间随意进出、上课手机响铃、上课做其他科作业、上课睡觉、上课坐姿不端正;

课堂上抢答举手、表达清楚性、观点清晰性、内容正确性;

小组讨论时主题明确性、讨论气氛活跃性、是否组织者、是否积极发言;

实验前仪器样品状况确认与否、破损仪器数量、破损仪器时间、仪器破损上报情况、仪器赔偿、仪器整理情况、实验完成用时长短、实验过程操作规范程度、实验过程中的纪律遵守情况、实验后卫生打扫情况、原始实验数据准确度、原始实验数据有无抄袭现象、实验报告的质量;

预习、作业的完成的时间点,预习、作业的完成的时间段;

预习、作业的质量,预习、作业的次数;

作业诚信、考试诚信;

测验、考试成绩、考试用时;

当通过设备交互答题,使用鼠标、键盘、体感设备、触摸屏、模拟设备时;

完成的时间点的早晚、完成的时间段的长短、操作的频率的多少、重复的频率的多少、设备位移的长度长短、设备位移的速度大小、设备位移的精度大小、操作的质量高低;

当通过设备交互答题,使用语音输入设备时;

响度、音调、音品或音色、语速。

步骤(S2)中的学习表现数据库和性格特征数据库具有学生通过性格测验所获得的性格特征数据以及通过学习系统所获得学习数据,这些数据都是所获得的原始数据。其中,性格测验包含卡特尔16PF人格测验、大五人格测验,卡特尔16PF人格测验包含16个维度的性格特征,而大五人格测验包含五个维度的性格特征

步骤(S3)中建立学习者的学习表现数据模型和性格特征数据模型,主要是通过学习表现与性格特征的原始数据,通过计算其中的相关系数,输出学习者的新的性格特征的稳定模型。

步骤(S4)中使用的数据数学算法为包含聚类分析算法(S41)、关联规则法(S42)、回归分析法(S43)、BP神经网络模型(S44)、决策树(S45)、支持向量机(S46)的数据挖掘算法。

采用聚类分析算法(S41)将学习者的表现数据类型进行相似性比较,将比较相似的个体性格特征归为同一组数据库,采用以下步骤:

(1)选取性格特征作为初始的聚类中心;

(2)输入学习者的学习表现数据和性格特征的测试结果;

(3)计算学习表现数据类型与各个性格特征聚类中心之间的距离,使误差平方和局部最小,并将距离用统一量化的手段给出,把学习表现数据类型与性格特征之间距离小于阈值的分配给相应的性格特征聚类中心,得到的学习表现数据与性格特征之间的分配关系与距离;

(4)用新的数据重复(1)、(2)、(3)的操作,待相关系数稳定后,得到稳定的数学模型;

(5)然后将新的学习者的学习表现数据输入到性格特征评估系统,可得出新学习者的性格特征

采用关联规则法(S42)将不同的性格特征关联起来,当个体表现出一种性格特征时,则可推断其他性格特征,其方法为:

补充用这种方法的核心步骤

采用回归分析法(S43)建立数学模型,用最小二乘法估计确定同类型的学习表现数据与某些性格特征之间的定量关系式,采用逐步回归、向前回归和向后回归方法计算某个学习表现数据与某个性格特征的相关性参数来判断某个学习表现数据与某个性格特征之间的影响是否显著。

采用BP神经网络法(S44)对所有的学习表现数据与性格特征综合分析,采用最速下降法,沿距离梯度下降的方向求解极小值,经过不断的迭代与修正得出所有的学习表现数据与性格特征之间存在的最短距离,最端距离代表与学习表现数据相关的性格特征

采用决策树(S45)法对学习表现数据分类,将不同类型学习表现数据更清楚地表示出来。

采用步骤(S4)中的支持向量机(S46)算法计算出某一性格特征与其相关的学习表现数据所产生的“最短距离方式”,经过不断的迭代运算,得出性格特征相关性较强的学习表现数据。

有益的效果是:

使用本方法,性格特征评估系统可以使用新学习者的学习表现数据来评价其性格特征,从而对学生日后的发展进行科学指导,有利于教师把握学生的性格。

方法包括以下步骤:S1:将个体表现数据输入到数据库;S2:建立学习者的学习表现数据库和性格特征数据库;S3:建立学习者的学习表现数据模型和性格特征数据模型;S4:使用数据算法计算学习表现数据;S5:输出个体性格特征

针对步骤S1,步骤(S1)中的个体表现数据为诸如以下类型且不局限于以下类型的个体表现:

旷课、请假、迟到、早退;

课堂纪律、上课说话、上课玩手机、上课吃东西、上课看与学科内容无关的书、上课期间随意进出、上课手机响铃、上课做其他科作业、上课睡觉、上课坐姿不端正;

课堂上抢答举手、表达清楚性、观点清晰性、内容正确性;

小组讨论时主题明确性、讨论气氛活跃性、是否组织者、是否积极发言;

实验前仪器样品状况确认与否、破损仪器数量、破损仪器时间、仪器破损上报情况、仪器赔偿、仪器整理情况、实验完成用时长短、实验过程操作规范程度、实验过程中的纪律遵守情况、实验后卫生打扫情况、原始实验数据准确度、原始实验数据有无抄袭现象、实验报告的质量;

预习、作业的完成的时间点,预习、作业的完成的时间段;

预习、作业的质量,预习、作业的次数;

作业诚信、考试诚信;

测验、考试成绩、考试用时;

当通过设备交互答题,使用鼠标、键盘、体感设备、触摸屏、模拟设备时;

完成的时间点的早晚、完成的时间段的长短、操作的频率的多少、重复的频率的多少、设备位移的长度长短、设备位移的速度大小、设备位移的精度大小、操作的质量高低;

当通过设备交互答题,使用语音输入设备时;

响度、音调、音品或音色、语速。

针对步骤S2,学习表现数据库和性格特征数据库的获得可以通过以下方式实现:在学习开始时,先对学习者进行常规的性格测验,获得学习者的性格特征,并将其储存进入数据库,然后让学习者使用学习系统,产生学习表现数据,也将其储存进入数据库,建立学习者的学习表现数据和性格特征数据库。其中,性格测验包含卡特尔16PF人格测验、大五人格测验,卡特尔16PF人格测验包含16个维度的性格特征,分别是因素A-乐群性、因素B-聪慧性、因素C-稳定性、因素E-恃强性、因素F-兴奋性、因素G-有恒性、因素H-敢为性、因素I-敏感性、因素L-怀疑性、因素M-幻想性、因素N-世故性、因素O-忧虑性、因素Q1--实验性、因素Q2--独立性、因素Q3--自律性、因素Q4--紧张性;而大五人格测验包含五个维度的性格特征,分别是外倾性、神经质或情绪稳定性、开放性、随和性、尽责性。

针对步骤S3,建立学习者的学习表现数据模型和性格特征数据模型可以通过以下方式实现:将学习者的学习表现数据与性格测评结果作为性格特征评估系统的训练集,性格特征评估系统使用训练集进行学习,调整各种类型的学习表现数据与不同类型的性格特征相关系数,产生新的各种类型的学习表现数据与不同类型的性格特征的相关关系与相关系数,形成学习表现数据与性格特征相互关系的稳定模型,并将其储存进入数据库。当相关系数稳定后,性格特征评估系统根据新学习者的学习表现数据输出新学习者的性格特征

针对步骤S4,的数据数学算法为包含聚类分析算法S41、关联规则法S42、回归分析法S43、BP神经网络模型S44、支持向量机S46的数据挖掘算法,实施步骤可以通过以下方式实现:

针对步骤S41,在进行聚类分析算法运算时,聚类分析算法将学习者的表现数据类型进行相似性比较,将比较相似的个体性格特征归为同一组数据库,采用以下步骤:

(1)选取性格特征作为初始的聚类中心;

(2)输入学习者的学习表现数据和性格特征的测试结果;

(3)计算学习表现数据类型与各个性格特征聚类中心之间的距离,使误差平方和局部最小,并将距离用统一量化的手段给出,把学习表现数据类型与性格特征之间距离小于阈值的分配给相应的性格特征聚类中心,得到的学习表现数据与性格特征之间的分配关系与距离;

(4)用新的数据重复(1)、(2)、(3)的操作,待相关系数稳定后,得到稳定的数学模型;

(5)然后将新的学习者的学习表现数据输入到性格特征评估系统,可得出新学习者的性格特征

比如:首先计算学习表现数据中迟到的次数,早退的次数,破损仪器数量多少等与各类性格特征之间的距离,其中对于“敢为性”这种性格来说只有迟到的次数,早退的次数,损仪器数量多少,作业诚信度,上课玩手机,上课睡觉,仪器赔偿及时与否之间的距离小于阈值,所以认定“敢为性”只与这些学习表现数据存在相关性关联,并且根据算出的距离按照比例得到对于“敢为性”迟到次数占25%,早退的次数占20%,作业诚信度占5%,上课玩手机占8%,损坏仪器数量多少占13%,仪器赔偿及时与否占15%,上课睡觉12%,其余学习表现数据均小于2%的阈值,所以不作为考虑因素。

同理,对于迟到的次数这一学习表现数据,计算其与各类性格特征之间的距离,其中对于迟到次数这一学习表现数据来说,只有敢为性,恃强性,稳定性,有恒性,实验性,自律性之间的距离小于阈值,所以认为迟到次数只与这些性格特征有关,并且根据算出的距离按照比例得到对于迟到次数这一学习表现数据得到敢为性占35%,恃强性占25%,稳定性占15%,有恒性8%,实验性占5%,自律性6%,其余性格特征均小于2%的阈值,所以不作为考虑因素。

以此为例可以找到任意一个学习表现数据与其余性格特征之间的相关性关系,也可以找到任意一个性格特征与其余学习表现数据之间的相关性关系。

针对步骤S42,可以通过以下方式实现:关联规则法将不同的性格特征关联起来,当个体表现出一种性格特征时,则可推断其他性格特征关联规则法数据之间的简单的联系规则,是指数据之间的相互依赖关系,比如性格特征敢为性与迟到的次数,早退的次数,损仪器数量多少,作业诚信度,上课玩手机,上课睡觉,仪器赔偿及时与否这些学习表现数据有着很强的关联特征,也就是当这些学习表现数据有着很高的特点是,则被测者是有着敢为性的性格特征的。对于迟到的次数这一学习表现数据,与其相关联的性格特征为敢为性,恃强性,稳定性,有恒性,实验性,自律性。当被测者迟到次数较多时,我们认为他的性格特征与敢为性,恃强性,稳定性,有恒性,实验性,自律性有关。

补充用这种方法的核心步骤

针对步骤S43,可以通过以下方式实现,首先数学模型,用最小二乘法估计确定同类型的学习表现数据与某些性格特征之间的定量关系式,采用逐步回归、向前回归和向后回归方法计算某个学习表现数据与某个性格特征的相关性参数来判断某个学习表现数据与某个性格特征之间的影响是否显著。具体地来说,利用一组同类型学习表现数据,确定其与某些性格特征之间的定量关系式,即建立数学模型用最小二乘法估计其中的相关性参数;在许多学习表现数据共同影响着一个性格特征的关系中,用逐步回归、向前回归和向后回归方法判断哪个(或哪些)学习表现数据的影响是显著的,哪些学习表现数据的影响是不显著的,将影响显著的学习表现数据带入模型中,而剔除影响不显著的变量;用新的数据对这些关系式的可信程度进行检验,检验结果在误差允许范围内即可利用所求的关系式对新的学习表现数据得到的性格特征进行预测或控制。

比如:对于无故旷课,多次请假,迟到,早退,上课说话,上课玩手机,上课吃东西,上课看与学科内容无关的书,上课睡觉,上课坐姿不端正,预习答题状况是否良好,答题用时长短,预习答题时间的早晚,实验前仪器样品状况确认与否,破损仪器数量多少,破损仪器时间,仪器破损上报情况,仪器赔偿及时与否,仪器归放情况,实验完成用时长短,实验过程操作规范程度,实验过程中的纪律遵守情况,试验后卫生打扫情况,原始实验数据准确度,原始实验数据有无抄袭现象,实验报告的质量高低,作业成绩,作业用时,上交时间,上交次数,作业诚信,考试成绩,考试用时,考试诚信等学习表现数据,这些共同影响着敢为性这一性格特征,将这些数据用逐步回归、向前回归和向后回归方法计算这些学习表现数据与敢为性这一性格特征的相关性参数,从而判断这些学习表现数据与敢为性这一性格特征之间的影响是否显著,经计算相关性参数,发现只有迟到的次数,早退的次数,损仪器数量多少,作业诚信度,上课玩手机,上课睡觉,仪器赔偿及时与否存在明显的相关关系,其余学习表现数据并未有显著相关关系,所以仅考虑迟到的次数,早退的次数,损仪器数量多少,作业诚信度,上课玩手机,上课睡觉,仪器赔偿及时与否与敢为性这一性格特征之间的相关性。同理,我们可以做出任意一个性格特征所对应的与其显著的学习表现数据。

针对步骤S44,BP神经网络法对所有的学习表现数据与性格特征综合分析,采用最速下降法,沿距离梯度下降的方向求解极小值,经过不断的迭代与修正得出所有的学习表现数据与性格特征之间存在的最短距离,最端距离代表与学习表现数据相关的性格特征。具体地来说,将所有的学习表现数据与性格特征综合分析,由之前算法可以得到所有的数据与特征之间存在的距离,并且相关性越近,距离越短,所以在综合分析时,我们采用最速下降法,沿距离梯度下降的方向求解极小值,经过不断的迭代与修正得到对于某一性格特征与其相关的学习表现数据所产生的“最短距离方式”,也可以求出对与某一学习表现数据与其对应的性格特征产生的“最短距离方式”,比如对于敢为性,所产生的最短距离代表的学习表现数据为迟到的次数,早退的次数,损仪器数量多少,作业诚信度,上课玩手机,上课睡觉,仪器赔偿及时与否。对于迟到的次数这一学习表现数据,所产生的最短距离代表的性格特征为敢为性,恃强性,稳定性,有恒性,实验性,自律性。

针对步骤S45,可以通过以下方式实现,比如,我们已经得到各个学习表现数据与性格特征之间的概率,判断取哪些学习表现数据与其中某一个性格特征合适。我们想得到独立性相关的学习表现数据,则独立性为决策点,这些学习表现数据为状态节点,并标明每一数据特征与其之间的概率,用递归式对数进行修剪,得到最优的路径。我们得到与独立性相关的学习表现数据为早退,上课看与学科内容无关的书,上课睡觉,上课坐姿不端正,预习答题时间的早晚,仪器归放情况,实验过程操作规范程度这些学习表现数据有着最优的关系,其将学习表现数据分类,将不同类型学习表现数据更清楚地表示出来。

比如这样的:

针对步骤S46,可以通过以下方式实现,其能够建立起与相关的学习算法有关的监督学习模型,可以根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折中,以求获得最好的推广能力。比如:我们有很多学习表现数据,以及提炼出的性格特征,确定他们之间的映射关系,与神经网络类似,计算某一性格特征与其相关的学习表现数据所产生的“最短距离方式”,经过不断的迭代运算,最终得到比如对于独立性这一性格特征来说,与其相关性较强的学习表现数据为早退,上课看与学科内容无关的书,上课睡觉,上课坐姿不端正,预习答题时间的早晚,仪器归放情况,实验过程操作规范程度。

二、非负矩阵分解

把一个学期10名同学的请假、旷课、迟到、上课说话和上课睡觉的数据汇总为一个训练集,统计数据如表1所示:

表1训练集

问题描述:就是建立100个不同类型的定量参数和10个另外类型的定量参数的相关关系和强度。那100个参数之间和那10个参数是多对多关系。但是不知道具体的相关关系和强度。有数据集用来学习和验证,相关关系和强度稳定后进行应用。

前五列数据属于100个不同类型的定量参数,后四列数据属于10个另外类型的定量参数,找前五列数据和后四列数据的相关关系和强度。

要求:进行一个聚类分析。只需要写清过程,不需要具体计算。

问题分析:根据问题描述,可以使用非负矩阵分解算法来解决这个问题。

具体分析过程:

1.非负矩阵分解算法发展历史

它是一种新的矩阵分解算法,最早是1994年由Paatero和Tapper等人提出的,当时这个算法叫正矩阵分解,直到1999年, Lee和Seung在Nature上发表了他们对矩阵分解的研究,才逐渐引起广大研究学者的兴趣,发展到现在,矩阵分解方法已经应用到很多领域。

2.矩阵分解理论

假定给定一个原数据,用非负的数据矩阵(差异矩阵)进行表示,将其分解为两个非负矩阵(基矩阵)和(系数矩阵)的乘积,并且乘积要尽可能的逼近原来的矩阵,即(k << m, n)。非负矩阵分解模型可以表示为以下的优化问题:

需要使用一下迭代公式来求得W和H

3.非负矩阵分解算法应用到以上问题中

(1)首先是原始矩阵的构造:在这个问题中,我们构建矩阵数据矩阵(属性-对象矩阵),10行5列的数据矩阵。如下所示:

其中,一行代表一名学生(对象),一列代表一个属性(是否请假、无故旷课、迟到、上课说话、上课睡觉)。

(2)对这个矩阵进行矩阵分解,其中k值选择为4,W和H用随机初始化,其中每个值都在0-1之间。W和H按照上面的迭代公式进行求解,迭代次数设置为1000。

(3)矩阵分解之后,用矩阵W和H进行聚类分析。

迭代1000次之后,得到基矩阵和系数矩阵

基矩阵:

由系数矩阵可得到前五列和后四列关系,权重可以看作是强度。

三、来源于创青春比赛

1、apriori关联:

>library(arules)

>xingge=read.csv("guanlian.csv",header=T) 

#值得注意的是,"guanlian.csv"从一个数值矩阵转                                                     #换为0-1矩阵,再从0-1矩阵转为逻辑型矩阵,即                                                     #0:FALSE,1:TRUE。

[1]"QJ" "KK" "CD" "SH" "SJ""Q1"

>data(list=xingge)

Therewere 30 warnings (use warnings() to see them)

>mode(xingge)

[1]"list"

>rules=apriori(xingge,parameter=list(support=0.3,confidence=0.4))

Apriori

Parameterspecification:

confidence minval smax aremaval originalSupport maxtime support minlen

0.40.11 none FALSETRUE50.31

maxlen targetext

10rules FALSE

Algorithmiccontrol:

filter tree heap memopt load sort verbose

0.1 TRUE TRUEFALSE TRUE2TRUE

Absoluteminimum support count: 3

set itemappearances ...[0 item(s)] done [0.00s].

settransactions ...[9 item(s), 10 transaction(s)] done [0.00s].

sortingand recoding items ... [9 item(s)] done [0.00s].

creatingtransaction tree ... done [0.00s].

checkingsubsets of size 1 2 3 4 5 6 done [0.00s].

writing... [320 rule(s)] done [0.00s].

creatingS4 object... done [0.00s].

>summary(rules)

set of320 rules

rulelength distribution (lhs + rhs):sizes

123456

748108 106456

Min. 1st Qu.MedianMean 3rd Qu.Max.

1.0003.0003.0003.4754.0006.000

summaryof quality measures:

supportconfidencelift

Min.:0.3000Min.:0.4000Min.:0.8163

1st Qu.:0.30001st Qu.:0.69171st Qu.:1.0000

Median :0.4000Median :1.0000Median :1.0000

Mean:0.4363Mean:0.8366Mean:1.0489

3rd Qu.:0.50003rd Qu.:1.00003rd Qu.:1.0179

Max.:1.0000Max.:1.0000Max.:1.4286

mininginfo:

data ntransactions support confidence

xingge100.30.4

>frequentsets=eclat(xingge,parameter=list(support=0.3,maxlen=10))

Eclat

parameterspecification:

tidLists support minlen maxlentargetext

FALSE0.3110 frequent itemsets FALSE

algorithmiccontrol:

sparse sort verbose

7-2TRUE

Absoluteminimum support count: 3

createitemset ...

settransactions ...[9 item(s), 10 transaction(s)] done [0.00s].

sortingand recoding items ... [9 item(s)] done [0.00s].

creatingbit matrix ... [9 row(s), 10 column(s)] done [0.00s].

writing... [111 set(s)] done [0.00s].

CreatingS4 object... done [0.00s].

>inspect(frequentsets[1:10])

itemssupport

[1]{QJ=TURE,KK=TURE,CD=TURE,SH=TURE,Q1=TURE} 0.3

[2]{QJ=TURE,KK=TURE,SH=TURE,Q1=TURE}0.3

[3]{KK=TURE,CD=TURE,SH=TURE,Q1=TURE}0.3

[4]{QJ=TURE,KK=TURE,CD=TURE,Q1=TURE}0.3

[5]{QJ=TURE,KK=TURE,Q1=TURE}0.3

[6]{KK=TURE,CD=TURE,Q1=TURE}0.3

[7]{KK=TURE,SH=TURE,Q1=TURE}0.3

[8]{QJ=TURE,CD=TURE,SH=TURE,Q1=TURE}0.3

[9]{QJ=TURE,SH=TURE,Q1=TURE}0.3

[10] {CD=TURE,SH=TURE,Q1=TURE}0.3


2、Bayes

>data<-matrix(c("A1","B2","B3","B4","B5","no",

+"B1","A2","B3","B4","B5","no",

+"B1","B2","B3","B4","A5","no",

+"B1","B2","B3","A4","B5","no"),byrow=TRUE,

+nrow=4,ncol=6)

> data

[,1] [,2] [,3] [,4] [,5][,6]

[1,] "A1" "B2" "B3" "B4""B5" "no"

[2,] "B1" "A2" "B3" "B4""B5" "no"

[3,] "B1" "B2" "B3" "B4""A5" "no"

[4,] "B1" "B2" "B3" "A4""B5" "no"

> library("e1071")

> library("foreign")

>prior.yes=sum(data[,6]=="yes")/length(data[,6])

> prior.yes

[1] 0

>prior.no=sum(data[,6]=="no")/length(data[,6])

> prior.no

[1] 1

(第一种函数)

> naive.bayes.prediction<-function(condition.vec){

+G.yes<-sum((data[,1]==condition.vec[1])&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+sum((data[,1]==condition.vec[2])&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+sum((data[,1]==condition.vec[3])&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+sum((data[,1]==condition.vec[4])&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+sum((data[,1]==condition.vec[5])&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+prior.yes

+G.no<-sum((data[,1]==condition.vec[1])&(data[,5]=="no"))/sum(data[,5]=="no")*

+sum((data[,1]==condition.vec[2])&(data[,5]=="no"))/sum(data[,5]=="no")*

+sum((data[,1]==condition.vec[3])&(data[,5]=="no"))/sum(data[,5]=="no")*

+sum((data[,1]==condition.vec[4])&(data[,5]=="no"))/sum(data[,5]=="no")*

+sum((data[,1]==condition.vec[5])&(data[,5]=="no"))/sum(data[,5]=="no")*

+prior.no

+return(list(post.pr.yes=G.yes,post.pr.no=G.no,prediction=ifelse(G.yes>=G.yes,"yes","no")))

+}


>naive.bayes.prediction(c("A1","B2","B3","B4","B5"))

$post.pr.yes

[1] NaN

$post.pr.no

[1] NaN

$prediction

[1] NA

>naive.bayes.prediction(c("A1","A2","A3","A4","A5"))

$post.pr.yes

[1] NaN

$post.pr.no

[1] NaN

$prediction

[1] NA

(第二种函数)

>naive.bayes.prediction<-function(condition.vec){

+ + +G.yes<-sum((data[,1]=="A1")&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+ + +sum((data[,1]=="A2")&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+ + +sum((data[,1]=="A3")&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+ + +sum((data[,1]=="A4")&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+ + +sum((data[,1]=="A5")&(data[,5]=="yes"))/sum(data[,5]=="yes")*

+ + +prior.yes

+ + +G.no<-sum((data[,1]=="B1")&(data[,5]=="no"))/sum(data[,5]=="no")*

+ + +sum((data[,1]=="B2")&(data[,5]=="no"))/sum(data[,5]=="no")*

+ + +sum((data[,1]=="B3")&(data[,5]=="no"))/sum(data[,5]=="no")*

+ + +sum((data[,1]=="B4")&(data[,5]=="no"))/sum(data[,5]=="no")*

+ + +sum((data[,1]=="B5")&(data[,5]=="no"))/sum(data[,5]=="no")*

+ + +prior.no

+ + +return(list(post.pr.yes=G.yes,post.pr.no=G.no,prediction=ifelse(G.yes>=G.yes,"yes","no")))

+}

>naive.bayes.prediction(c("A1","A2","A3","A4","A5"))

Error in ++G.yes <- sum((data[, 1] == "A1") &(data[, 5] == "yes"))/sum(data[,:

找不到对象'G.yes'

>naive.bayes.prediction(c("A1","B2","B3","B4","B5"))

Error in ++G.yes <- sum((data[, 1] == "A1") &(data[, 5] == "yes"))/sum(data[,:

找不到对象'G.yes'


3、K-means:

> data(iris)

> head(iris,n=6)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species

15.13.51.40.2setosa

24.93.01.40.2setosa

34.73.21.30.2setosa

44.63.11.50.2setosa

55.03.61.40.2setosa

65.43.91.70.4setosa

> install.packages("fpc")

> library(fpc)#估计轮廓系数

>norm<-function(x){(x-mean(x))/(sqry(var(x)))}

>norm<-function(x){(x-mean(x))/(sqrt(var(x)))}

> raw.data<-iris[,1:4]

>norm.data<-data.frame(sl=norm(raw.data[,1]),sw=(raw.data[,2]),pl=(raw.data[,3]),pw=(raw.data[,4]))

>k<-2:10

> round<-40

> rst<-sapply(k,function(i)#轮廓系数

+ {

+ print(paste("k=",i))

+ mean(sapply(1:round,function(r){

+ print(paste("Round",r))

+ result<-kmeans(norm.data,i)

+stats<-cluster.stats(dist(norm.data),result$cluster)

+ stats$avg.silwidth

+ }))

+ })

[1] "k= 2"

[1] "Round 1"

[1] "Round 2"

[1] "Round 3"

[1] "Round 4"

[1] "Round 5"

[1] "Round 6"

[1] "Round 7"

[1] "Round 8"

[1] "Round 9"

[1] "Round 10"

[1] "Round 11"

[1] "Round 12"

[1] "Round 13"

[1] "Round 14"

[1] "Round 15"

[1] "Round 16"

[1] "Round 17"

[1] "Round 18"

[1] "Round 19"

[1] "Round 20"

[1] "Round 21"

[1] "Round 22"

[1] "Round 23"

[1] "Round 24"

[1] "Round 25"

[1] "Round 26"

[1] "Round 27"

[1] "Round 28"

[1] "Round 29"

[1] "Round 30"

[1] "Round 31"


…….

> plot(k,rst,type='l',main='轮廓系数与k的关系',ylab='轮廓系数')

> plot(k,rst)

> old.par<-par(mfrow=c(1,2))

> k=2

> clu<-kmeans(norm.data,k)

>mds=cmdscale(dist(norm.data,method="euclidean"))

> plot(mds,col=clu$cluster,main='kmeans聚类k=2',pch=19)

> plot(mds,col=iris$Species,main='原始聚类',pch=19)

> par(old.par)


数据分析咨询请扫描二维码

客服在线
立即咨询