KMean and PCA connection
KMean and PCA connection
正如我所理解的模式识别,主成分分析用于删除数据集中不必要的数据,这样当数据集将在KMean中使用时,它将比未进行主成分分析的数据集执行更少的操作。所以,我可以有这样的代码(伪代码):
assign .csv to var DATA
PCA_DATA = PCAcompute(DATA)
result = Kmean(PCA_DATA)
plotToGraph(result)
我说得对吗?
近一个月来,我一直在寻找它导入csv然后用PCA进行聚类的示例程序。我需要做的是使用虹膜数据集将Kmean结果的输出与PCA的Kmean输出进行比较。
我很难理解你的陈述。
首先,主成分分析是主成分分析。这是一个获取高维数据并试图找到数据(几乎)所在的低维(超)平面的过程。因此,它删除了不必要的尺寸。
对于KMean
,您可能是指k-means clustering
。这在低维空间中的工作速度要快得多,因此PCA是减少维度数量的可行方法。
(程序请求偏离堆栈溢出的主题)
我没有使用KMean,但我对神经网络训练数据使用了PCA来减少特征。它在OpenCV的C++接口中。让我们从读取csv文件开始。我的csv文件类似于:
im_path_1;label1
im_path_2;label2
所以要读取csv文件,我的函数:
void read_csv(常量字符串和文件名,矢量和图像,矢量和标签,字符分隔符=';'){std::ifstream文件(filename.c_str(),ifstream::in);if(!file){string error_message="未给定有效的输入文件,请检查给定的文件名。";CV_Error(1,Error_message);}字符串行,路径,类标签;while(getline(文件,行)){弦流性(线);getline(iness,path,separator);getline(iness,classlabel);if(!path.empty()&&!classlabel.empty(){Mat im=imread(路径,0);images.push_back(im);labels.push_back(atoi(classlabel.c_str()));}}}
它在Mat变量的向量中保存数据。OpenCV的PCA要求将数据作为Mat变量中的行向量进行滚动。要做到这一点:
Mat rollVectortoMat(const vector<Mat> &data)
{
Mat dst(static_cast<int>(data.size()), data[0].rows*data[0].cols, CV_32FC1);
for(unsigned int i = 0; i < data.size(); i++)
{
Mat image_row = data[i].clone().reshape(1,1);
Mat row_i = dst.row(i);
image_row.convertTo(row_i,CV_32FC1, 1/255.);
}
return dst;
}
这个函数的一个简单用法:
int main()
{
PCA pca;
vector<Mat> images_train;
vector<int> labels_train;
read_csv("train1k.txt",images_train,labels_train);
Mat rawTrainData = rollVectortoMat(images_train);
int pca_size = 500;
Mat trainData(rawTrainData.rows, pca_size,rawTrainData.type());
Mat testData(rawTestData.rows,pca_size,rawTestData.type());
pca(rawTrainData,Mat(),CV_PCA_DATA_AS_ROW,pca_size);
for(int i = 0; i < rawTrainData.rows ; i++)
pca.project(rawTrainData.row(i),trainData.row(i));
cout<<trainData.size()<<endl;
return 0;
}
trainData
变量是列车组的精简版本。对于pca_size
变量;而不是将其用作CCD_ 5;可以对0.95
进行主成分分析以保留%95
方差。我希望这对PCA部分有所帮助。我用这些简化的数据来训练神经网络。
相关文章:
- 为什么 QObject::d isconnect(const QMetaObject::Connection &connection) 采用 const 参数并打算修改它?
- 在OpenCV中使用PCA进行降维
- 如何使用 epoll(void* event.data.ptr) 管理 Connection 的生命周期
- 是否有一种计算CGAL中Surface_mesh对象的PCA的方法
- MySQL 异常"connection lost during query"、"MySQL server has gone away"和"command out of sync"
- C++ ADO Connection
- raspbian (rasp pi 3) connection to database (mysql / mariadb
- KMean and PCA connection
- OpenCV 3 中的 PCA 错误
- OPENCV:image_proc中的 PCA 应用程序错误
- 为什么提升 asio udp 连接会抛出"send: Connection refused"?
- QTcpSocket 在几次连接成功后发出"Connection Refused Error"?
- 型号的2D向量的PCA计算
- Libpqxx connection pool
- 1.#QNAN OpenCV PCA 中的错误
- 使 mysqlpp::Connection 对象成为 wxFrame 类对象的私有成员
- 修复:C++服务器/客户端程序:"Connection refused"
- visual C++ ODBC SQL Server 2008 Connection
- 运行算法 PCA(主成分分析)后究竟会发生什么
- 捕获"NVIDIA OpenGL driver lost connection"错误