Python:將MNIST數據PCA降維到87維,並另存爲arff格式

import numpy as np
import copy
import pandas as pd
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

MNIST = datasets.fetch_mldata('MNIST original')
X, y = MNIST['data'], MNIST['target']
# Scaler = StandardScaler()
# X = Scaler.fit_transform(X)
pca = PCA(0.9)
pca.fit(X)
X = pca.fit_transform(X)
# print(y.shape)

# data = np.array(pd.read_csv(r'E:\dataset\clusterData\sonar.csv', header=None))
# X = data[:, :-1]
# y = data[:, -1]
# Scaler = StandardScaler()
# pca = PCA(n_components=10)
# X = Scaler.fit_transform(data[:, :-1])
# X = pca.fit_transform(X)
# y = data[:, -1]

y = np.vstack(y)

data = np.hstack((X,y))
print(data.shape)
data = pd.DataFrame(data)
data.to_csv(r'E:\dataset\clusterData\MNIST_PCA.csv',header=None,index=None)

然後,打開生成的csv文件,在第一行對每一列加入一個屬性名稱。不加的話第一行數據被默認爲head。在java運行中數據集就會少一行。

package classifier;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.core.converters.ArffSaver;

import java.util.Random;
import java.io.File;

public class TransformCSV_arff {
    public static void main(String[] args) throws Exception{
        Instances allData = DataSource.read("E:\\dataset\\clusterData\\COIL20_2.csv");
        ArffSaver saver = new ArffSaver();
        saver.setInstances(allData);
        saver.setFile(new File("E:\\dataset\\clusterData\\COIL20_2.arff"));
        saver.writeBatch();
        System.out.println("已經轉化爲arrf文件");
    }
}

記得安裝weka包,不然就沒有然後了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章