Python学习第三篇:pca算法

来源:互联网 发布:c语言取绝对值 编辑:程序博客网 时间:2024/05/24 16:16

一,为什么使用pca算法

1,在实际的数据样本中往往存在多个特征,即在一张数据表格中存在多列,每一列代表一个特征。我们需要在这么多的数据中提取有用的数据信息,但是在整体的数据样本中有部分数据是无用的,或者说是该数据对整体的数据样本影响不大,如下学生成绩图

显而易见,政治成绩所有学生都是一样,所以我们在分析数据时,可以不用考虑整治成绩。但是如下学生成绩图

我们无法一眼看出在数据分析时,哪些特征是可以不加考虑的。pca算法的目的就是在大量的特征中找到主要的特征。

二,pca算法讲解

1,什么是线性相关?

给定向量组A:a1,a2,a3,a4,...aN。假设存在k1,k2,k3,k4,...kN。使得

a1*k1+a2*k2+a3*k3+...+aN*kN=0成立

则向量组A是线性相关的,否则A是线性无关

通俗的讲,线性相关就是指向量组中至少一个向量可以由其他向量线性表示

2,信噪比

在信号处理过程中,认为信号具有较大的方差,噪声具有较小的方差。信噪比就是方差比,信噪比越大,主成分提取就越准确。

3,样例分析

在学生成绩图中,有5个特征,在这些特征之中可能存在部分特征并不重要,但是我们无法直接剔除掉。所以通过pca算法实现特征剔除

三,pca算法python实现

1,创建数据集

package com.madongmei.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class CreateData {

    private static int LINE_NUM=100000;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file=new File("/Users/boleng/Desktop/python/myDataSet.txt");
        try {
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            for(int i=0;i<LINE_NUM;i++){
                int yuWen=(int) (Math.random()*100);
                int yingYu=(int) (Math.random()*100);
                int shuXue=(int) (Math.random()*100);
                int zhengZhi=(int) (Math.random()*100);
                int tiYu=(int) (Math.random()*100);
                String str=yuWen+","+yingYu+","+shuXue+","+zhengZhi+","+tiYu+"\n";
                System.out.println(str);
                try {
                    fileOutputStream.write(str.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}

2,数据如下

3,编写python代码

四,问题与解答

五,源代码

0 0
原创粉丝点击