版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(404)
>
虫友互识
(17)
>
导师招生
(12)
>
硕博家园
(3)
>
文献求助
(3)
>
休闲灌水
(3)
>
论文道贺祈福
(2)
>
基金申请
(2)
>
教师之家
(2)
>
考博
(2)
>
找工作
(2)
>
论文投稿
(2)
>
招聘信息布告栏
(1)
>
博后之家
(1)
>
数学
(1)
>
金融投资
(1)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
Shell&Perl
»
【原创】python 写的计算 PCA 的小脚本
南方科技大学公共卫生及应急管理学院2025级博士研究生招生报考通知
5
1/1
返回列表
查看: 1582 | 回复: 4
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
【奖励】
本帖被评价4次,作者xioooli增加金币
2.6
个
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖
xioooli
金虫
(小有名气)
程序强帖: 1
应助: 2
(幼儿园)
金币: 744
帖子: 82
在线: 33小时
虫号: 940951
[
资源
]
【原创】python 写的计算 PCA 的小脚本
RT
需要安装 numpy,如果还想要绘图的话得装 matplotlib,希望对大家能有点用
CODE:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
from copy import deepcopy
class PCA():
'''
Formula:
X = U . S . Vt
Useage:
p = PCA(X, fraction = 0.9)
in which `X` is the matrix of your data and `fraction` means
use principal components that account for e.g. 0.9 of the
total variance
Out:
p.U, p.S, p.Vt from numpy.linalg.svd
p.eigen: the eigenvalues of A*A, in decreasing order
eigen[j] / eigen.sum() is variable j's fraction of the
total variance;
look at the first few eigen[] to see how many PCs get
to 90 %, 95 % ...
p.npc: number of principal components,
e.g. 2 if the top 2 eigenvalues are >= `fraction` of the total.
p.sumvariance: the number of the variances
Methods:
p.center(X, axis = 0, scale = True)
classmethod for centering the matrix (e.g. `X`), returns
the centered matrix with out changing the original matrix
'''
def __init__(self, X, fraction = 0.85):
assert 0 <= fraction <= 1
# center the matric
A = self.center(X)
# SVD
self.U, self.S, self.Vt = np.linalg.svd(A, full_matrices = False)
assert np.all(self.S[:-1] >= self.S[1:]) # sorted
self.eigen = self.S**2
self.sumvariance = np.cumsum(self.eigen)
self.sumvariance /= self.sumvariance[-1]
self.npc = np.searchsorted(self.sumvariance, fraction) + 1
self.pc = self.U[:, :self.npc] * self.S[:self.npc]
@classmethod
def center(self, X, axis = 0, scale = True):
A = deepcopy(X)
mean = A.mean(axis = axis)
A -= mean
if scale:
std = A.std(axis = axis)
A /= np.where(std, std, 1.0)
return A
if __name__ == '__main__':
from matplotlib import pyplot as plt
import sys
if len(sys.argv) >= 2:
csv = sys.argv[1]
else:
print '%s /path/to/your_data_file_in_csv_format' %sys.argv[0]
sys.exit(1)
# you can define your own colors here
colors = {(0, 1, 2): 'red',
(3, 4, 5): 'blue',
(6, 7, 8, 9): 'green',
(10, 11, 12): 'yellow'}
def get_color(idx):
for i, c in colors.items():
if idx in i:
return c
X = np.genfromtxt(csv, delimiter = ',')
p = PCA(X, fraction = 0.9)
print p.npc
pc = p.pc
x, y = pc[:, 0], pc[:, 1]
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
for i, k in enumerate(zip(x,y)):
ax.text(k[0], k[1], str(i), bbox=dict(facecolor = get_color(i), alpha=0.5))
#plt.xlim(-8, 8)
#plt.ylim(-4, 4)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('bulabula')
plt.legend()
plt.grid(True)
plt.show()
[
Last edited by zzy870720z on 2011-5-14 at 12:31
]
回复此楼
» 收录本帖的淘帖专辑推荐
ML相关
source
» 猜你喜欢
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
孩子确诊有中度注意力缺陷
已经有12人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
» 本主题相关价值贴推荐,对您同样有帮助:
你会写基金吗?
已经有26人回复
【转载】Python参考手册(第4版)
已经有6人回复
|求助| 统计学中在进行相关性检验时,P值如何计算?
已经有9人回复
急问 现在哪里的计算中心有vasp5.2.12?
已经有6人回复
Gaussian计算得到的前线分子轨道图能说明什么?
已经有7人回复
《python科学计算》已经出版了
已经有36人回复
有关主成份PCA、多元线性回归的计算问题??
已经有8人回复
【求助】根据年鉴计算的能源消费总量与规划中列出的能耗总量差异原因?
已经有3人回复
求误差分析过程(计算过程/公式)
已经有10人回复
【求助】希望帮我简单解释下电子鼻分析方法——PCA和LDA
已经有7人回复
【求助】用MS中的castep模块计算晶体
已经有12人回复
【求助】氧化还原电势计算怎么得出HOMO-LOMO轨道能级
已经有4人回复
1楼
2010-12-12 21:30:04
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
redtu160
木虫
(正式写手)
应助: 0
(幼儿园)
金币: 2510.6
帖子: 359
在线: 87.6小时
虫号: 472109
★★★ 三星级,支持鼓励
★
jjdg(金币+1): 感谢参与 2011-07-31 00:51:02
thank you very much!
赞
一下
(1人)
回复此楼
高级回复
3楼
2011-07-30 17:19:11
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
查看全部 5 个回答
bennyg
木虫
(著名写手)
应助: 29
(小学生)
金币: 1864.5
帖子: 2293
在线: 202.2小时
虫号: 597641
★★★ 三星级,支持鼓励
运行后,出错。sys.exit(1)
赞
一下
回复此楼
5楼
2012-02-14 08:40:36
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
查看全部 5 个回答
☆ 无星级
★ 一星级
★★★ 三星级
★★★★★ 五星级
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定