U E D R , A S I H C RSS

데블스캠프2013/셋째날/머신러닝 (rev. 1.8)

데블스캠프2013/셋째날/머신러닝

Machine Learning


정종록, 조영준, ?? 팀

  • 코드를 올려주세요.


김민재, 송정규, 김도현 팀

  • 코드를 올려주세요.


서민관, 박희정 팀

  • 코드를 올려주세요.
MachineLearning.py
def compare(firstData, secondData):
    diffSum = 0;
    firstDataList = [int(i) for i in firstData.split(',')];
    secondDataList = [int(i) for i in secondData.split(',')];
    for i in range(len(firstDataList)):
        diffSum += abs(firstDataList[i] - secondDataList[i]);
    return diffSum;

trainData = open('DataSet/train_data11293x8165').readlines();
trainClass = open('DataSet/train_class11293x20').readlines();
testData = open('DataSet/test_data7528x8165').readlines();
testClass = list();
print 'load DataSet finished'

similiarIndex = 0;
diffValue = 0;
leastDiffValue = 10000;

for i in range(len(testData)):
    for j in range(len(trainData)):
        diffValue = compare(testData[i], trainData[j]);
        # print 'diffValue : ', diffValue;
        if diffValue < leastDiffValue:
            leastDiffValue = diffValue;
            similiarIndex = j;
    leastDiffValue = 10000;
    print 'similiar index : ', similiarIndex;
    testClass.append(trainClass[similiarIndex]);

f = open("test_class")
for i in testClass:
    f.write(i);

MachineLearning.cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <istream>

using namespace std;

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}

std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}

int compare(string firstData, string secondData) {
	vector<string> firstDataList = split(firstData, ',');
	vector<string> secondDataList = split(secondData, ',');
	int diffValue = 0;

	for ( int i = 0; i < firstDataList.size(); i++ ) {
		diffValue += abs(atoi(firstDataList[i].c_str()) - atoi(secondDataList[i].c_str()));
	}

	return diffValue;
}

int main(int argc, char *argv[]) {
	ifstream trainData;
	trainData.open("train_data11293x8165");
	vector<string> trainDataList = vector<string>();
	ifstream trainClass;
	trainClass.open("train_class11293x20");
	vector<string> trainClassList = vector<string>();
	ifstream testData;
	testData.open("test_data7528x8165");
	vector<string> testDataList = vector<string>();
	vector<string> testClass = vector<string>();
	int leastDiffValue = 10000;
	int similiarIndex = 0;

	cout << "File Open Finished" << endl;

	string line;

	int idx = 0;
	while ( trainData.good() ) {
		getline(trainData, line);
		trainDataList.insert(trainDataList.end(), line);
		cout << "index : " << idx++ << endl;
		cout << "data[0] : " << line[0] << endl;
	}
	while ( trainClass.good() ) {
		getline(trainClass, line);
		trainClassList.insert(trainClassList.end(), line);
	}
	while ( testData.good() ) {
		getline(testData, line);
		testDataList.insert(testDataList.end(), line);
	}

	cout << "File load Finished" << endl;

	for ( int i = 0; i < testDataList.size(); i++ ) {
		for ( int j = 0; j < trainDataList.size(); j++ ) {
			int diffValue = compare(testDataList[i], trainDataList[j]);

			if ( diffValue < leastDiffValue ) {
				leastDiffValue = diffValue;
				similiarIndex = j;
			}
		}

		leastDiffValue = 10000;
		cout << "similiar index : " << similiarIndex << endl;
		testClass.insert(testClass.end(), trainClassList[similiarIndex]);
	}

	ofstream outputFile;
	outputFile.open("Test_Class");
	for ( int i = 0; i < testClass.size(); i++ ) {
		outputFile << testClass[i] << endl;
	}
	outputFile.close();
	
	trainData.close();
	trainClass.close();
	testData.close();

	return 0;
}

김해천, 김남규 팀

  • 코드를 올려주세요.


안혁준, 남근우 팀

  • 코드를 올려주세요.

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>

using namespace std;

struct DArray {
	int ** data;
	int col;
	int row;
};

int ** allocArr(int row, int col);
void deallocArr(int ** target, int row);
void readFile(int ** target, const char * filename, int row, int col);
void findClass(DArray train_data, DArray train_class, DArray test_data);

int main(){
	char buf[1024*1024];

	//alloc
	int ** train_data = allocArr(11293, 8165);
	int ** train_class = allocArr(11293, 20);
	int ** test_data = allocArr(7528, 8165);

	readFile(train_data, "DataSet/train_data11293x8165", 11293, 8165);
	readFile(train_class, "DataSet/train_class11293x20", 11293, 20);
	readFile(test_data, "DataSet/test_data7528x8165", 7528, 8165);

	DArray train_d;
	DArray train_c;
	DArray test_d;

	train_d.data = train_data;
	train_d.row = 11293;
	train_d.col = 8163;
	train_c.data = train_class;
	train_c.row = 11293;
	train_c.col = 20;
	test_d.data = test_data;
	test_d.row = 7528;
	test_d.col = 8163;
	
	findClass(train_d, train_c, test_d);

	//dealloc
	deallocArr(train_data, 11293);
	deallocArr(train_class, 11293);
	deallocArr(test_data, 7528);
}
int ** allocArr(int row, int col){
	int ** train_data = (int**)malloc(sizeof(int*) * row);
	for(int i = 0; i < row; i++){
		train_data[i] = (int*)malloc(sizeof(int) * col);
	}
	return train_data;
}
void deallocArr(int ** target, int row){
	for(int i = 0; i < row; i++){
		free(target[i]);
	}
	free(target);
}
void readFile(int ** target, const char * filename, int row, int col){
	FILE * file = fopen(filename, "r");
	for(int i = 0; i < row; i++){
		for( int j = 0; j < col; j++){
			if(j < col)
				fscanf(file, "%d,", &target[i][j]);
			else
				fscanf(file, "%d", &target[i][j]);
		}
	}
	fclose(file);
}
void findClass(DArray train_data, DArray train_class, DArray test_data){
	for(int i = 0; i < test_data.row; i++){
		//test_data[i];
		int min_index = -1;
		int min = 1000;
		for(int j = 0; j < train_data.row; j++){
			//train_data[j]
			int sum = 0; 
			for(int k =0; k < train_data.col; k++){
				int v = test_data.data[i][k] - train_data.data[j][k];
				v = v >0 ? v : -v;
				sum += v;
			}

			if(sum < min){
				min_index = j;
				min = sum;
			}
		}
		//min이 어떤 클래스 인지.
		for(int j = 0; j < train_class.col; j++){
			if(train_class.data[min_index][j]){
				printf("%d\n", j);
			}
		}
	}
}

고한종, 임지훈 팀

  • 코드를 올려주세요.


장혁수, 이예나 팀

  • 코드를 올려주세요.


박성현, 송바위샘 팀

  • 코드를 올려주세요.

#include <stdio.h>
#include <math.h>

int getClosestIndex(int sum, double compare[]);

int main(void) {

	FILE* train_data = fopen("train_data11293x8165", "rb");
	FILE* train_class = fopen("train_class11293x20", "rb");

	double avr[20] = {0,};
	const int SIZE = 11293;
	int sum[SIZE] = {0,};
	int count[20] = {0,};
	long long total[20] = {0,};

	int d = 0;
	char temp;

	for(int i=0; i<SIZE; ++i) {
		
		for(int k=0; k<8165; ++k) {
			fscanf(train_data, "%d,", &d);
			sum[i] += d;
		}

		for(int k=0; k<20; ++k) {
			fscanf(train_class, "%d,", &d);
			// printf("%d, ", d);
			if(d == 1) {
				total[k] += sum[i];
				count[k]++;
			}
		}
		printf("%d...\n", i);
	}

	for(int i=0; i<20; i++) {
		if( count[i] != 0 ) {
			avr[i] = total[i] / (double)count[i];
		}
		printf("avr[%d] : %lf\n", i, avr[i]);
	}
	
	fclose(train_data);
	fclose(train_class);

	FILE* test_data = fopen("test_data7528x8165", "rb");
	FILE* result = fopen("result.txt", "w");
	int new_sum[7528] = {0,};

	for(int i=0; i<7528; ++i) {
			
		for(int k=0; k<8165; ++k) {
			fscanf(train_data, "%d,", &d);
			new_sum[i] += d;			
		}
		printf("%d...%d\n", i, new_sum[i]);

		int idx = getClosestIndex(new_sum[i], avr);
		fprintf(result, "%d\n", idx+1);
	}
	fclose(test_data);
	fclose(result);

	return 0;
}

int getClosestIndex(int sum, double compare[]) {

	int idx = 0;
	double min = abs((double)sum - compare[0]);

	for(int i=1; i<20; i++) {
		if( min > abs((double)sum - compare[i]) ) {
			min = abs((double)sum - compare[i]);
			idx = i;
		}
	}

	return idx;
}

백주협, 지영민, ?? 팀

  • 코드를 올려주세요.


김윤환 팀

  • 코드를 올려주세요.



블스캠2013/셋째날
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:16
Processing time 0.0315 sec