@fanxy
2020-03-29T16:55:15.000000Z
字数 5938
阅读 4024
樊潇彦
复旦大学经济学院
金融数据
下载数据: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 # 主成分载荷矩阵 Phi
names(pca.out) # 其他可报告的变量
head(pca.out$x) # 主成分得分矩阵 Z
pve=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.out
plot(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$loadings
round(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$cluster
hc.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()