Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <svm.h>
- /*
- Veri dosyasini okuyup SVM Problem donduren fonksiyon
- */
- svm_problem*
- parse_train_data(std::string filename)
- {
- svm_problem *ret = new svm_problem;
- // Uc alan var l, y, ve x
- // l: Length: Veri sayimiz
- // y: Label: etiketler
- // x: X: egitim verisi
- // Dosyayi acip alanlari oku
- std::ifstream inf(filename);
- std::string line;
- std::getline(inf, line); // ilk satiri yoksay
- // Ilk olarak X ve y'leri vektor icinde tutalim.
- // Veri kumesi icinde kac veri var bilmiyoruz.
- std::vector<svm_node*> table;
- std::vector<double> labels;
- int counter = 0; // Bu veri sayisini tutacak
- while (std::getline(inf, line))
- {
- counter += 1; // Yeni satir
- std::vector<std::string> tokens = split(line.c_str(), ',');
- // ',' karakterinden bol
- // tokens.size() veri kumesinin sutun sayisini tutuyor
- // Yani tokens.size() - 1 kadar X sutunu var
- // LibSVM formati eger bir satirda 0 olmayan N degisken varsa
- // N+1 adet alan istiyor. Buna yazida degindik.
- // yani tokens.size() -1 +1
- svm_node* data = new svm_node[tokens.size()]; // Yeni bir node(Satir) olustur
- for (int i = 0; i < tokens.size() - 1; i++)
- {
- data[i].index = i;
- data[i].value = std::stoi(tokens[i]);
- }
- data[tokens.size()].index = -1; // N+1'in sebebi sonda manasiz bir -1 istiyor ki bu satirin bittigi anlasilsin.
- table.push_back(data);
- labels.push_back(std::stoi(tokens[tokens.size() -1 ])); // Y'yi ekle
- }
- ret->l = counter; // satir sayisini ata
- ret->y = new double[ret->l]; // y icin alan al
- ret->x = new svm_node*[ret->l]; // x icin alan al
- for(int i = 0;i < ret->l;i++)
- {
- ret->y[i] = labels[i]; // vektorden verileri LibSVM formatina aktar
- ret->x[i] = table[i];
- }
- inf.close();
- return ret;
- }
Add Comment
Please, Sign In to add comment