IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> HIT机器学习实验四降维R语言参考代码 -> 正文阅读

[人工智能]HIT机器学习实验四降维R语言参考代码

##引入包
library(scatterplot3d)
library(RSpectra)
library(jpeg)
library(animation)
library(rgl)
##一键清空
rm(list=ls())
##样本个数
num<-100
##维度
v<-3
##降维后维度
k<-2
##设置x,y,z轴的旋转角度
angle1<-20/180*pi
angle2<-15/180*pi
angle3<-10/180*pi
##生成符合高斯分布的数据
x1<-rnorm(100,mean=1,sd=1.8)
x2<-rnorm(100,mean=2,sd=1.9)
x3<-rnorm(100,mean=4,sd=1.7)
##数据旋转
Rx<-matrix(c(1,0,0,
? ? ? ? ? ? ?0,cos(angle1),-sin(angle1),
? ? ? ? ? ? ?0,sin(angle1),cos(angle1)),nrow=3,ncol=3,byrow=TRUE)
Ry<-matrix(c(cos(angle2),0,sin(angle2),
? ? ? ? ? ? ?0,1,0,
? ? ? ? ? ? ?-sin(angle2),0,cos(angle2)),nrow=3,ncol=3,byrow=TRUE)
Rz<-matrix(c(cos(angle3),-sin(angle3),0,
? ? ? ? ? ? ?sin(angle3),cos(angle3),0,
? ? ? ? ? ? ?0,0,1),nrow=3,ncol=3,byrow=TRUE)

X<-matrix(c(x1,x2,x3),nrow=v,ncol=num,byrow=TRUE)
X<-Rz%*%Ry%*%Rx%*%X
XX<-X
##显示原始数据的分布
scatterplot3d(X[1,],X[2,],X[3,],main='1.4.1')
plot3d(XX[1,],XX[2,],XX[3,],col=rainbow(12),size=5)
##对样本正则化
for(i in 1:v){
? total<-0
? for(j in 1:num){
? ? total<-total+X[i,j]
? }
? total<-total/num
? X[i,]<-X[i,]-total
}
##特征值分解
C<-X%*%t(X)
ev<-svd(X)
vec<-ev$v[,order(ev$d,decreasing = TRUE)]
val<-ev$d[order(ev$d,decreasing = TRUE)]
##取前k个特征向量
P<-t(vec[,1:k])
##计算低维坐标系的投影
Y<-P%*%t(X)%*%XX
plot(Y[1,],Y[2,],main='1.4.3',
? ? ?xlab='x1', ylab='x2',col="red")
##重构样本集
YY<-matrix(0,nrow=v,ncol=num)
for(i in 1:num){
? hy<-rep(0,v)
? for(j in 1:k){
? ? hy<-hy+Y[j,i]*vec[j,]
? }
? YY[,i]<-hy
}
scatterplot3d(YY[1,],YY[2,],YY[3,],main='1.4.1')
plot3d(YY[1,],YY[2,],YY[3,],col=rainbow(12),size=5)
##载入图片,并且显示出来
library(raster)
library(jpeg)
##图片数量
num<-4
##降维后图片维度
k<-50
##图片维度
v<-500*500
photo.raster<-array(0,dim=c(500,500,num))
raster.photo <- raster("sam_1.jpg")
photo.flip <- flip(raster.photo, direction = "y")
##将数据转换为矩阵形式
?photo.raster[,,1] <- t(as.matrix(photo.flip))
?##灰化处理
?image(photo.raster[,,1], col = grey(seq(0, 1, length = 256))) ?
?raster.photo<- raster("sam_2.jpg")
?photo.flip <- flip(raster.photo, direction = "y")
?##将数据转换为矩阵形式
?photo.raster[,,2] <- t(as.matrix(photo.flip))
?##灰化处理
?image(photo.raster[,,2], col = grey(seq(0, 1, length = 256))) ?
?raster.photo<- raster("sam_3.jpg")
?photo.flip <- flip(raster.photo, direction = "y")
?##将数据转换为矩阵形式
?photo.raster[,,3]<- t(as.matrix(photo.flip))
?##灰化处理
?image(photo.raster[,,3], col = grey(seq(0, 1, length = 256)))?
?raster.photo<- raster("sam_4.jpg")
?photo.flip <- flip(raster.photo, direction = "y")
?##将数据转换为矩阵形式
?photo.raster[,,4] <- t(as.matrix(photo.flip))
?##灰化处理
?image(photo.raster[,,4], col = grey(seq(0, 1, length = 256)))
?##计算平均脸
?pic_mean<-matrix(0,nrow=500,ncol=500)
?for(i in 1:num){
? ?pic_mean<-pic_mean+photo.raster[,,i]
?}?
?pic_mean<- pic_mean/num
?for(i in 1:num){
? ?photo.raster[,,i]<-photo.raster[,,i]-pic_mean
?}
?for(i in 1:num){
? ?##奇异值进行分解
?photo.svd <- svd(photo.raster[,,i])
?d <- diag(photo.svd$d)
?v <- as.matrix(photo.svd$v)
?u <- photo.svd$u
?##取前k个特征向量
u1 <- as.matrix(u[, 1:k])
?d1 <- as.matrix(d[1:k, 1:k])
?v1 <- as.matrix(v[, 1:k])
?##重构样本集
?photo1 <- u1 %*% d1 %*% t(v1)
?##将降维后的图片显示出来
?image(photo1+pic_mean, col = grey(seq(0, 1, length = 256)))
?cat(10*log(norm(photo1)/norm(photo1-photo.raster[,,i]))/log(10))
?}
?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:17:23  更:2022-02-24 15:17:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:19:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码