没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
PCA 算法实现程序设计文档
1 PCA 简介
PCA 即是主成分分析,又称分量分析。旨在利用降维的思想,
把多指标转化为少数几个综合指标。
在统计学中,主成分分析 PCA 是一种简化数据集的技术。它是
一个线性变换,这个变换把数据变换到一个新的坐标系统中,使得
任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第
二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经
常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。
这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分
往往能够保留住数据的最重要方面。但是,这也不是一定的,要视
具体应用而定。
2 算法实现的步骤:
(1)第一步:计算矩阵 X 的样本的协方差矩阵 S(此为不标准
PCA,标准 PCA 计算相关系数矩阵 C)。
(2) 第二步:计算协方 差矩阵 S(或 C )的特征向量 e1,e2,
…,eN 和特征值,t=1,2,…,N。
(3)第三步:投影数据到特征向量张成的空间之中。
PCA 的目标是寻找 r(r<n)个变量,使它们反映事物的主要特
图 1 PCA 算法实现流程图
程序实现过程中:
1)输入矩阵数据采用 Excel 表存储;前提是需要先对数据进行
标准化处理。
2)输入矩阵后,对矩阵进行转置得到转置矩阵,利用原矩阵与
转置矩阵得到协方差矩阵。
3)根据协方差矩阵,使用雅克比迭代法计算得到特征值和特征
向量。对特征值按从大到小进行排序,并调整特征向量的顺序。
4)输入需要降低至的维度,并根据输入的维度值在取出特征向
量作为降维所需的基向量。
5)使用基向量构成的矩阵与输入矩阵进行乘运算,最终得到降
维后的矩阵。
程序设计实现代码如下:
1. using System;
2. using System.Data;
3. using System.Windows.Forms;
4.
5. namespace PCA
6. {
7. public partial class Form1 : Form
8. {
9. public Form1()
10. {
11. InitializeComponent();
12. }
13.
14.
15. //声明输入矩阵
16. double[,] Matrix = null;
17.
18. //根据获取到的数据生成矩阵
19. static int tableRows;
20. static int tableColumns;
21.
22. //声明特征值和特征向量
23. double[]Eigenvalue;
24. double[,]Eigenvector;
25.
26.
27.
28. private void SelectData_Click(object sender, EventArgs e)
29. {
30. OpenFileDialog openFileDialog = new OpenFileDialog();
31. openFileDialog.Filter = "(*.xlsx)|*.xlsx";
32. if (openFileDialog.ShowDialog() == DialogResult.OK)
33. {
34. DataTable dataTable =
ImportAndExportData.ImExcelAsTable(openFileDialog.FileName);
35. //记录矩阵行数与列数
36. tableColumns = dataTable.Columns.Count;
37. tableRows = dataTable.Rows.Count;
38. //声明输入矩阵
39. MatrixData.DataSource = dataTable;
40. Matrix = new double[tableRows, tableColumns];
41.
42. //读取数据到矩阵中
43. for (int i = 0; i < dataTable.Rows.Count; i++)
44. {
45. for (int j = 0; j < dataTable.Columns.Count; j++)
46. {
47. Matrix[i, j] =
Convert.ToDouble(dataTable.Rows[i][j]);
48. }
49. }
50.
51. //矩阵转置
52. double[,] Turnmatrix =
Matrixprocessing.turnzhi(Matrix);
53.
54.
55. //输出转置矩阵
56. TurnMatrixData.DataSource =
ShowData.ConvertMatrixToDatatable(Turnmatrix);
剩余17页未读,继续阅读
资源评论
qq_33693593
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功