@fanxy
2020-03-29T08:55:15.000000Z
字数 5938
阅读 4487
樊潇彦 复旦大学经济学院 金融数据
下载数据:Ch5_Data.rar
setwd("D:\\...\\Ch05")rm(list=ls())install.packages("ISLR")# 调用library(ISLR)library(tidyverse)library(ggplot2)
机器学习(machine learning):设计和分析一些让计算机可以自动“学习”的算法,即从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。虽然算法设计过程中也涉及统计学理论,但与统计学习相比,机器学习更关注可以实现的、行之有效的学习算法(如决策树、聚类、支持向量机、神经网络等)。 
数据挖掘(data mining) :从大量的数据中自动搜索隐藏于其中的知识和信息的过程,也称为数据库知识发现(Knowledge-Discovery in Databases, KDD)。数据挖掘在大数据采集和存储技术的基础上,通过统计分析、机器学习、在线分析处理、情报检索、专家系统和模式识别等诸多方法来实现具体的应用性目标。
问题:
定义:

library(ISLR) # 调用数据包dimnames(USArrests) # 美国各州犯罪数据指标apply(USArrests,2,mean) # 查看各指标均值和方差apply(USArrests,2, var)
在进行主成分分析之前,需要将各指标进行标准化,否则将直接影响分析结果:

pca.out=prcomp(USArrests, scale=TRUE) # 主成分分析,用scale=T 进行标准化,或者用x=scale(x)手动处理pca.out # 主成分载荷矩阵 Phinames(pca.out) # 其他可报告的变量head(pca.out$x) # 主成分得分矩阵 Zpve=pca.out$sdev^2/sum(pca.out$sdev^2) # 每个主成分的方差解释比plot(pve, type="l")cumpve=cumsum(pve) # 累积方差解释比plot(cumpve, type="l")biplot(pca.out, scale=0) # 前两个主成分的双标图

思想:自下而上,逐一将差异最小(距离最近)的样本合并归类。

方法:
步骤1:将每个样本作为一个类,即设定 个初始类,并计算两两之间的差异度(如欧氏距离);
步骤2:令 :
(1)在 个类中找到差异最小的两个类进行合并;
(2)计算剩下的 个类中两两之间的差异度。

四种常用的类间差异度测量方法(最长距离、最短距离、类平均和重心法):

# K均值聚类set.seed(101)x=matrix(rnorm(100*2),100,2) # 随机生成样本量为100、维度为2的数据集xmean=matrix(rnorm(8,sd=4),4,2) # 生成4组、2维的随机数which=sample(1:4,100,replace=TRUE) # 将100个样本随机分为4组x=x+xmean[which,] # 通过改变4组数据均值的方式将其分开plot(x,col=which,pch=19) # 做图km.out=kmeans(x,4,nstart=15) # K均值聚类,K=4, 重复15次,报告最好结果km.outplot(x,col=km.out$cluster,cex=0.5,pch=1,lwd=2)which=c(4,3,2,1)[which] # 原数据分组倒序排列km.result=data.frame(km=as.factor(km.out$cluster),which=as.factor(which), x)table(km.result[,1:2]) # 检查聚类结果,发现有两个样本匹配错了km.result$miskm=(km.result$km!=km.result$which)ggplot(km.result, aes(x=X1, y=X2, color=km, size=miskm)) +geom_point() + theme_bw()# 系统聚类hc.complete=hclust(dist(x),method="complete") # 最长距离法plot(hc.complete)hc.single=hclust(dist(x),method="single") # 最短距离法plot(hc.single)hc.average=hclust(dist(x),method="average") # 类平均法plot(hc.average)hc.cut=cutree(hc.complete,4) # 基于最长距离法的聚类结果分为4组table(hc.cut,which) # 与真实数据比较,有三个样本分错result=data.frame(x)result$hc=as.factor(c(2,3,4,1)[hc.cut])result$mishc=(result$hc!=which)ggplot(result, aes(x=X1, y=X2, color=hc, size=mishc)) +geom_point() + theme_bw()
rtn=read.table("m-5clog-9008.txt",header=T) # 读取5支个股收益率数据pca.cov = princomp(rtn) # 对协方差矩阵做主成分分析summary(pca.cov)pca.corr=princomp(rtn,cor=T) # 对相关系数矩阵做主成分分析summary(pca.corr)names(pca.corr)pca2=prcomp(rtn, scale=T) # 用prcomp命令的结果与pca.corr一致round(data.frame(pca.corr$sdev, pca2$sdev),3)pca.corr$loadingsround(pca2$rotation,3)
# 数据读取credit=read.csv("Credit.csv", header=T)[,-1]str(credit)# 将种族等因子变量转换为数值变量credit= credit %>%mutate(Gender=as.numeric(as.character(Gender)==" Male"),Student=as.numeric(as.character(Student)=="Yes"),Married=as.numeric(as.character(Married)=="Yes"),Ethtype=as.numeric(Ethnicity))%>%dplyr::select(-Ethnicity)# 聚类分析km.out=kmeans(credit,3,nstart=15)credit$km3=km.out$clusterhc.out=hclust(dist(credit),method="complete")hc.cut=cutree(hc.out,3)credit$hc=hc.cut# 比较两种聚类结果table(hc.cut,km.out$cluster)ggplot(credit,aes(x=Income, y=Rating, color=as.factor(hc), shape=as.factor(km3)))+geom_point() + theme_bw()