Numpy를 이용한 기계학습 프로젝트 - 3
오늘은 트리를 직접 만들어 보는 실습을 하기로 했다. 트리는 의사결정 기술이라고 해서 분류 기술 중 가장 일반적으로 사용되는 기술이라고 한다. 의사결정 트리의 기초가 되는것은 바로 프로그래밍을 하게 되면 종종 보게 되는 플로우차트(flowchart)이다. 얼마 전 내가 토론대회에서 논제결과를 발표했을 때 반론으로 "플로우차트가 비전문가들이 알아보기 힘드니 풀어서 설명해라"라고 나왔는데, Flowchart는 소스코드를 디자인화시킨 것이지 비전문가들에게 완벽하게 코드를 이해시키기 위한 그림이 아니다. 혹시나 헷갈리는 일이 없었으면 한다.
-------------------------------------------------------------------------------------------
* Numpy 기계학습의 모든 문서는 제가 머신러닝을 공부하고, 제 프로젝트에 필요한 알고리즘을 찾기 위해 정리하는 일종의 '요점정리 노트' 입니다. 혹여나 오해 없으시기 바랍니다. (2016.03.14 추가)
-------------------------------------------------------------------------------------------
(출처 : Wikipedia, 문제가 될 경우 다른 사진으로 대체)
플로우차트가 왜 머신러닝에서 언급되냐 하면 데이터 집합을 구분하기 위해 필요하기 때문이다. 의사결정 트리, 즉 플로우차트를 만들기 위해서는 하나의 최초 의사결정을 만들어야 한다. 의사결정의 구조는 다음과 같다.
최초 의사결정은 데이터를 분할하는데 영향을 주는 속성으로 결정되게 되고, 이러한 결정은 모든 속성에 대해 측정을 하면서 얻어지며, 결정된 속성으로 분할하는 경우 가장 좋은 결과를 얻게 되는 것이다.
그런 다음 데이터 집합을 하위 집합으로 분할한다. 하위 집합은 최초 의사결정의 가지로 모이게 된다. 가지에 있는 데이터가 모두 같은 분류에 속하면 계속 반복하지 않아도 되지만, 만약 그렇지 않다면 그 과정을 다시 반복해야 할 것이다.
이렇게 생기는 데이터 집합을 분할하기 전과 후의 변화를 정보 이득이라고 하며, 데이터 집합에 대한 정보 측정 방법을 섀넌 엔트로피, 줄여서 엔트로피라고 한다. 아마도 정보 이득과 엔트로피라는 용어가 혼란스럽게 들릴 수도 있다. 하지만 이 단어들이 혼란스러운 것은 당연한 이야기이다. 이에 대한 답은 이 글을 읽는 독자들이 알아서 찾아 나가기를 바란다.
우선, 나는 데이터 집합의 엔트로피를 계산하는 함수를 만들어 보기로 하였다. 예제에 나온 소스코드는 다음과 같다.
def calcShannonEnt(dataSet): numEntries = len(dataSet) labelCounts = {} for featVec in dataSet: currentLabel = featVec[-1] if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 labelCounts[currentLabel] += 1 shannonEnt = 0.0 for key in labelCounts: prob = float(labelCounts[key])/numEntries shannonEnt -= prob * log(prob,2) #log base 2 return shannonEnt
그 다음 집합을 분할하는 함수를 만들어 보았다. 소스코드는 아래와 같다.
def splitDataSet(dataSet, axis, value): retDataSet = [] for featVec in dataSet: if featVec[axis] == value: reducedFeatVec = featVec[:axis] reducedFeatVec.extend(featVec[axis+1:]) retDataSet.append(reducedFeatVec) return retDataSet그 다음 데이터 분할 시 가장 좋은 속성을 선택하는 함수를 만들었다. 소스코드는 아래와 같다.
def chooseBestFeatureToSplit(dataSet): numFeatures = len(dataSet[0]) - 1 baseEntropy = calcShannonEnt(dataSet) bestInfoGain = 0.0; bestFeature = -1 for i in range(numFeatures): featList = [example[i] for example in dataSet] uniqueVals = set(featList) newEntropy = 0.0 for value in uniqueVals: subDataSet = splitDataSet(dataSet, i, value) prob = len(subDataSet)/float(len(dataSet)) newEntropy += prob * calcShannonEnt(subDataSet) infoGain = baseEntropy - newEntropy if (infoGain > bestInfoGain): bestInfoGain = infoGain bestFeature = i return bestFeature그 다음, 트리 만들기 함수를 만들었다. 소스코드는 아래와 같다.
def createTree(dataSet,labels): classList = [example[-1] for example in dataSet] if classList.count(classList[0]) == len(classList): return classList[0] if len(dataSet[0]) == 1: return majorityCnt(classList) bestFeat = chooseBestFeatureToSplit(dataSet) bestFeatLabel = labels[bestFeat] myTree = {bestFeatLabel:{}} del(labels[bestFeat]) featValues = [example[bestFeat] for example in dataSet] uniqueVals = set(featValues) for value in uniqueVals: subLabels = labels[:] myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels) return myTree
최근 Github에 내가 만든 머신러닝 소스코드를 올려 공유하고 있다. 주소는 아래와 같다.
https://github.com/itsss/machinelearning
오늘은 여기까지 하기로 하고, 내일 실제로 동작해보는 것으로 했다.
'Project > Dev Story' 카테고리의 다른 글
Numpy를 이용한 기계학습 프로젝트 - 5 (0) | 2016.01.09 |
---|---|
Numpy를 이용한 기계학습 프로젝트 - 4 (0) | 2016.01.08 |
Numpy를 이용한 기계학습 프로젝트 - 2 (0) | 2016.01.05 |
[MathProject] C언어로 약수 계산기 만들기 & Github 업로드 (0) | 2016.01.04 |
Numpy를 이용한 기계학습 프로젝트 테스트 - 1 (0) | 2016.01.04 |
사람을 위한 아름다운 기술, 만드로 전자의수 (Mark.4) 제작기
전년도 12월말 경, 만드로 전자의수 Mark 4를 제작하신 만드로용님에게 30만원 상당의 전자의수 키트를 받았다.
▲ 만드로 전자의수를 제작하신 만드로용님, 근전도 센서를 이용한 의수 제어를 시연하고 있다.
▲ 전시중인 Mark.4 전자의수 키트
키트를 받자마자 우선 3D 프린터 출력물의 베드를 제거했다. 쉽게 뗄 수 있다고 생각하였지만 큰 오산이었다. :) (베드란? 3D 프린터에서 인쇄 실물이 만들어 놓여지는 공간)
▲ 베드를 모두 제거한 출력물, 오른쪽 상단에 보이는 출력물은 제거를 하지 못했다. 제일 어려운 부분.
그 다음에는 왼쪽 상단에서 2번째에 보이는 손가락을 접합했다. 여기서 아주 큰 실수가 하나 있었는데 순간접착제 접합을 잘못 해버려서 떼기 위해 엄청 고생했다. 순간접착제를 사용할 때에는 꼭 테스트를 해 보고 붙여야 한다. 구멍의 크기가 다른 것은 다 이유가 있다. (생각을 좀 하고 살자! 생각을!!!)
▲ 회로 조립
그 다음, 아두이노가 들어갈 기판을 납땜하였다. 여기에는 4핀, 6핀, 10핀 커넥터가 각각 3개, 1개, 1개 들어가고, 아두이노 나노 보드와, 모터드라이브 2개, 저항 10K 4개, 저항 150 1개, 15핀 헤더 소켓 2개, LED 5개, 방열판 2개, 모터드라이버 소켓이 들어간다. 위 사진에서는 아두이노 나노와, 10핀 커넥터, LED 조립을 하지 않은 상태이다.
▲ 접합 완료된 손가락 조립
접합이 완료된 손가락을 조립했다. 이 부분에서 한 쪽은 너무 높고, 한쪽은 너무 낮아 무언가 미스가 있음을 확인하고 살펴보았더니 같은 짝이 아님을 알 수 있었다.
▲ 모터 커플러 조립 및 선 납땜.
▲ 베어링 및 스프링 조립. 스프링을 자르고 고정하는 과정이 제일 힘들었다. 스프링철사를 어느 정도 크기로 잘라야 할지는 그 안에서 늘어날 정도로 여유를 둬야 한다. 더 자세한 건 직접 경험을 해 보는것이 좋다.
▲ 회로 조립 완료.
시간이 날 때마다 짬짬이 하기 때문에 오늘은 여기까지 하기로 하였다. 내가 직접 조립을 해 보니 단순 조립하고는 차원이 달랐다. 실수를 할 때마다 창의력을 발휘해야 하는 순간들이 많았다. 너무 친절한 설명서는 실패를 줄이기 때문에 스스로 생각하는 시간을 없애 버릴 것 같다. 단순히 레고처럼 설명서를 보고 따라 조립을 한다면 단순 노동에 불과할 것이다. 사람을 위한 아름다운 기술에 대해 의미를 다시한번 생각해 보고, 메이킹을 직접 해보면서 창의력을 발휘할 수 있는 순간들이 있다면 진정한 메이커로써 성장이 가능할 것이다.
'Project > Resources' 카테고리의 다른 글
사람을 위한 아름다운 기술, 만드로 전자의수 (Mark.4) 제작기 2 (0) | 2016.03.12 |
---|---|
아트센터 나비 로봇파티 in 타작마당 (0) | 2016.01.11 |
Numpy를 이용한 기계학습 프로젝트 - 2
이번에는 k-최근접 이웃 알고리즘을 Python으로 시연해 보기로 하였다. k-최근접 이웃 알고리즘의 장점은 높은 정확도와 데이터에 대한 가정이 없다는 것이고, 단점은 계산 비용이 높고 많은 리소스를 요구한다는 것이다. 흔히 매우 간단한 기계학습 알고리즘에 속한다고 한다.
-------------------------------------------------------------------------------------------
* Numpy 기계학습의 모든 문서는 제가 머신러닝을 공부하고, 제 프로젝트에 필요한 알고리즘을 찾기 위해 정리하는 일종의 '요점정리 노트' 입니다. 혹여나 오해 없으시기 바랍니다. (2016.03.14 추가)
-------------------------------------------------------------------------------------------
훈련 데이터는 각각이 항목 분류명을 갖는 다차원 특징 공간에서의 벡터이다. 알고리즘의 훈련 단계는 오직 훈련 표본의 특징 벡터와 항목 분류명을 저장하는 것이다. 분류 단계에서 k는 사용자 정의 상수이고 분류명이 붙지 않은 벡터(질의 또는 검증점)는 k개의 훈련 표본 사이에서 가장 빈번한 분류명을 할당함으로써 분류된다. 연속 변수에서 가장 흔하게 사용되는 거리 척도는 유클리드 거리이다. 문자 분류와 같은 이산 변수의 경우 중첩 거리(또는 해밍 거리)와 같은 다른 척도가 사용될 수 있다. 예를 들어 유전자 표현 미세 배열 데이터의 경우, k-NN은 피어슨과 스피어만 같은 상관 계수를 사용해 왔다.종종 거리 척도가 큰 여백 최근접 이웃이나 이웃 성분 분석과 같은 특별한 알고리즘으로 학습된다면 k-NN의 분류의 정확성을 상당히 향상시킬 수 있다. (위키피디아 인용)
우선, kNN을 이용한 여러 프로젝트들을 구현하기 위해 파이썬 파일을 생성하고, 소스 코드를 추가할 것이다. 내가 추가한 kNN의 모듈의 소스코드는 아래와 같다.
from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] diffMat = tile(inX, (dataSetSize,1)) - dataSet sqDiffMat = diffMat**2 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 sortedDistIndicies = distances.argsort() classCount={} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0] def createDataSet(): group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels = ['A','A','B','B'] return group, labels def file2matrix(filename): fr = open(filename) numberOfLines = len(fr.readlines()) returnMat = zeros((numberOfLines,3)) classLabelVector = [] fr = open(filename) index = 0 for line in fr.readlines(): line = line.strip() listFromLine = line.split('\t') returnMat[index,:] = listFromLine[0:3] classLabelVector.append(int(listFromLine[-1])) index += 1 return returnMat,classLabelVector def autoNorm(dataSet): minVals = dataSet.min(0) maxVals = dataSet.max(0) ranges = maxVals - minVals normDataSet = zeros(shape(dataSet)) m = dataSet.shape[0] normDataSet = dataSet - tile(minVals, (m,1)) normDataSet = normDataSet/tile(ranges, (m,1)) return normDataSet, ranges, minVals def datingClassTest(): hoRatio = 0.50 #hold out 10% datingDataMat,datingLabels = file2matrix('datingTestSet2.txt') normMat, ranges, minVals = autoNorm(datingDataMat) m = normMat.shape[0] numTestVecs = int(m*hoRatio) errorCount = 0.0 for i in range(numTestVecs): classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3) print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i]) if (classifierResult != datingLabels[i]): errorCount += 1.0 print "the total error rate is: %f" % (errorCount/float(numTestVecs)) print errorCount def img2vector(filename): returnVect = zeros((1,1024)) fr = open(filename) for i in range(32): lineStr = fr.readline() for j in range(32): returnVect[0,32*i+j] = int(lineStr[j]) return returnVect def handwritingClassTest(): hwLabels = [] trainingFileList = listdir('trainingDigits') m = len(trainingFileList) trainingMat = zeros((m,1024)) for i in range(m): fileNameStr = trainingFileList[i] fileStr = fileNameStr.split('.')[0] classNumStr = int(fileStr.split('_')[0]) hwLabels.append(classNumStr) trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr) testFileList = listdir('testDigits') errorCount = 0.0 mTest = len(testFileList) for i in range(mTest): fileNameStr = testFileList[i] fileStr = fileNameStr.split('.')[0] classNumStr = int(fileStr.split('_')[0]) vectorUnderTest = img2vector('testDigits/%s' % fileNameStr) classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3) print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr) if (classifierResult != classNumStr): errorCount += 1.0 print "\nthe total number of errors is: %d" % errorCount print "\nthe total error rate is: %f" % (errorCount/float(mTest))
-----------------------------------------------------------------------
나는 이 중, 내가 옛날에 C#으로 개발했었던 Handwriting 알고리즘을 개발하고 싶었다. 이를 kNN을 활용해서 테스트를 해 보았다. 이미지 파일은 아래와 같다.
바이너리 이미지를 쉽게 다루도록 하기 위해 텍스트로 변환하였다.
이를 실제로 돌려 보면 아래와 같이 된다.
이 소스에서는 2000여개 Data 중 11개 오차가 발생했다. (1.2% 오류율)
이 실험을 해 보면서 kNN 알고리즘은 간단하며 데이터를 분류하는 데 효과적인 알고리즘이고, 데이터 구조에 대한 어떠한 정보도 알 수 없다는 것이 가장 큰 단점이라는 결론을 내리게 되었다. 오늘은 여기까지 하기로 하였다. 다음에는 kNN을 이용한 다른 시험도 해 보도록 해야 겠다.
'Project > Dev Story' 카테고리의 다른 글
Numpy를 이용한 기계학습 프로젝트 - 5 (0) | 2016.01.09 |
---|---|
Numpy를 이용한 기계학습 프로젝트 - 4 (0) | 2016.01.08 |
Numpy를 이용한 기계학습 프로젝트 - 3 (0) | 2016.01.07 |
[MathProject] C언어로 약수 계산기 만들기 & Github 업로드 (0) | 2016.01.04 |
Numpy를 이용한 기계학습 프로젝트 테스트 - 1 (0) | 2016.01.04 |
[MathProject] C언어로 약수 계산기 만들기 & Github 업로드
이번에는 중학교 1학년 수학에 나오는 약수를 구하는 방법을 C언어로 만들어 보았다.
소스 코드는 아래와 같다.
#include <stdio.h>
int main()
{
int i, number;
printf("Input number");
scanf("%d", &number);
for(i=1; i<=number; i++)
{
if(number%i==0)
{
printf("%d ", i);
}
}
printf("\n");
}
이 소스코드는 자연수를 입력하면 for문으로 반복하여 숫자와 for문 카운트의 나머지가 0이 나오면 숫자를 출력하도록 만든 소스 코드이다. 이를 계속 반복하여 약수를 구하도록 만들었다.
그리고, Github에 내가 만든 소스코드를 업로드하였다. 방법은 아래와 같다.
먼저, Git을 설치한다. https://git-scm.com/download/win에서 Windows Git을 다운받는다.
다 설치한 후 Git Bash를 실행 > 사용자 이름과 메일 주소를 설정한다. 설정 Command는 아래와 같다.
$ git config --global user.name "이름"
$ git config --global user.email "이메일"
커맨드를 입력한 후 다양한 명령어 출력을 읽기 쉽게 하기 위해 아래 명령어를 친다.
$git config --global color.ui auto
그 다음, ssh key를 생성해 Github에 등록해야 한다. 이를 위해
$ssh-keygen -t rsa -C "이메일" 을 친다. 정상적으로 과정이 완료되면
id_rsa.pub라는 공개 키가 생성된다. 이를 메모장으로 열고 전부 복사해서 Github 환경설정 > SSH Keys 부분에 붙여넣기 한다. 이후 실제로 동작하는지 확인하기 위해 $ssh -T git@github.com을 입력한다.
정상적으로 처리가 되었다면, Hi itsss! You've successfully... 라는 메시지가 출력될 것이다.
이후 Github에서 리포지토리 작성을 해야 하는데 이름은 아무거나 해도 된다. 이미 있다면 그냥 그걸로 해도 된다. 우선 Code를 작성한 후 그 코드를 사용자 디렉토리 (windows를 기준으로 현재 로그인된 사용자이름이 itsc인 경우 시작-ITSC로 가면 나오는 디렉토리)에 붙여 넣는다.
이후 이 명령어를 순차적으로 입력한다. (자신의 리포지토리에 들어가서 Code 내용을 보는게 더 정확함)
echo # 리포지토리 이름 >> 파일 이름
git init
git add 파일 이름
git commit -m "커밋 내용"
git remote add origin https://github.com/사용자 이름/리포지토리 이름.git
git push -u origin master
명령어를 다 입력하면 Github의 ID와 PW를 알려 달라고 한다. 알려 준 후 Github에 가서 확인해 보면 자신의 소스 코드가 올라간 것을 볼 수 있다.
오늘은 여기까지 하기로 했다.
'Project > Dev Story' 카테고리의 다른 글
Numpy를 이용한 기계학습 프로젝트 - 5 (0) | 2016.01.09 |
---|---|
Numpy를 이용한 기계학습 프로젝트 - 4 (0) | 2016.01.08 |
Numpy를 이용한 기계학습 프로젝트 - 3 (0) | 2016.01.07 |
Numpy를 이용한 기계학습 프로젝트 - 2 (0) | 2016.01.05 |
Numpy를 이용한 기계학습 프로젝트 테스트 - 1 (0) | 2016.01.04 |
Numpy를 이용한 기계학습 프로젝트 테스트 - 1
최근 머신러닝을 위한 프로젝트를 준비하고 있다. 이를 위해 Coursera에서 MOOC를 수강하며 R 프로그래밍 등의 머신러닝 스킬들을 익힐 수 있었다. 하지만 이로만은 충분치 않아 머신러닝 책을 사서 책에 나오는 내용들을 공부하면서 이를 블로그에 꾸준히 게재하려고 한다.
-------------------------------------------------------------------------------------------
* Numpy 기계학습의 모든 문서는 제가 머신러닝을 공부하고, 제 프로젝트에 필요한 알고리즘을 찾기 위해 정리하는 일종의 '요점정리 노트' 입니다. 혹여나 오해 없으시기 바랍니다. (2016.03.14 추가)
-------------------------------------------------------------------------------------------
언어는 수학 라이브러리들을 더 쉽게 연결하고, 인기가 많으면서 오픈소스이며, 내 프로젝트를 쉽게 공유하기 위해 Python이라는 언어를 선택했다.
* Python이란? 파이썬(Python)은 1991년 프로그래머인 귀도 반 로섬(Guido van Rossum)이 발표한 고급 프로그래밍 언어로, 플랫폼 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다. (위키피디아 인용)
우선 기계학습을 하기 위해 필요한 라이브러리인 numpy를 다운받아야 한다. 지금 내가 글을 쓰고 있는 시점에서는 numpy for python 3.5버전이 아직 출시되지 않았다. 그래서 파이썬 2.7버전을 다운받기로 하였다. 이후 numpy를 다운받기 위해 Sourceforge에 들어간다.
다운로드 링크는 이와 같다. (http://sourceforge.net/projects/numpy/files/NumPy/1.10.2/)
설치 후에는 아래와 같이 from numpy import * 를 파이썬 커맨드에 쳐 제대로 설치가 되었는지 확인한다.
이후 위 사진과 같이 numpy 함수가 제대로 작동하는지 테스트 해 보았다. 일단 여기까지 하고 이따가 더 올리기로 하겠다.
'Project > Dev Story' 카테고리의 다른 글
Numpy를 이용한 기계학습 프로젝트 - 5 (0) | 2016.01.09 |
---|---|
Numpy를 이용한 기계학습 프로젝트 - 4 (0) | 2016.01.08 |
Numpy를 이용한 기계학습 프로젝트 - 3 (0) | 2016.01.07 |
Numpy를 이용한 기계학습 프로젝트 - 2 (0) | 2016.01.05 |
[MathProject] C언어로 약수 계산기 만들기 & Github 업로드 (0) | 2016.01.04 |
최근 출시된 '라즈베리 파이 제로'에 대한 나의 생각
내가 초등학교 3학년 때 (2011년), 학교 컴퓨터로 자료를 분석하던 중 4만원대 컴퓨터에 대한 뉴스를 보게 되었다. 4만원 대 컴퓨터가 나온다니 믿기지 않았었다. 중학교 1학년이 된 지금, 메이커 활동을 하면서 아두이노와 라즈베리 파이를 접해볼 수 있었다. 라즈베리 파이는 하나의 초소형 컴퓨터라는 장점을 가지고 있었지만, 다소 큰 사이즈와 비싼 가격이라 누구나 쓰기에는 무리가 있었는데 이번엔 기존 라즈베리 파이와 같은 성능에 크기를 줄여 5000원대 가격에 살 수 있는 라즈베리 파이 제로를 출시했다.
라즈베리 파이 제로는 기존 라즈베리 파이의 모델보다 CPU의 성능이 40% 빨라지고, 나머지는 일반 라즈베리 파이와 같이 마이크로 SD, 데이터를 전송하거나 전원을 공급하기 위한 마이크로 USB, 그리고 모니터를 사용할 수 있도록 HDMI 잭, 라즈비안 리눅스 OS 설치환경을 갖추고 있다. 하지만 LAN이나 WiFi 모듈이 없기 때문에 이 모듈은 따로 별도의 통신 모듈을 연결해야 한다.
내 생각에는 라즈베리 파이가 소형 리눅스 PC라는 장점을 가지고 있지만 큰 사이즈와 다소 높은 가격대로 인해 부담이 있다고 생각한다. 하지만 이번 라즈베리 파이 제로는 이런 단점들을 극복해 아두이노 나노와비슷한 초소형 디바이스를 출시, 사물인터넷이나 웨어러블 프로젝트에 쉽게 대응할 수 있도록 하려는 것 같다.
[Coursera] Programming For Everybody (Python) 리뷰
안녕하세요. ITSC입니다.
오늘은 제가 처음으로 들은 MOOC 강좌인 Programming For Everybody (Python) 에 대해 소개를 하려고 합니다.
이 강좌에서 가르치는 미시간 대학 교수인 Charles Severance 교수는 몸에 Coursera 타투를 하고 다니고 괴짜 교수로 유명합니다.
제가 수업을 받을 때는 강의 내용을 이해한 후 교수가 제시하는 간단한 프로그래밍 과정을 수행해 온라인 저지 프로그램으로 채점을 해 점수에 반영시켰습니다. 물론 아주 기초이지만 저에게는 석학의 강의를 온라인에서 무료로 들을 수 있다는 점이 가장 매력적이였습니다.
또한, 다른 Coursera 강좌들처럼 매주 퀴즈를 풀어야 하고, 프로그래밍과 관련된 주제로 에세이를 3번씩 작성해야 합니다.
이 모든 과제는 (온라인 저지 제외) 전 세계 수강생들이 서로 평가하고 피드백을 주게 됩니다.
여기서 제가 영향을 받은 것은 문제가 풀리지 않을 때 그 문제를 포럼에 올리면 전 세계 사람들에게 피드백을 받고, 소통할 수 있는 장이 최고의 장점이라고 생각하였습니다.
아쉽게도 저는 그 때 인증 수료증을 받을 수 있는 나이가 안 되어 일반 수료증을 받았지만, 2달 동안 열심히 노력했다는 뿌듯함이 인증 수료증을 받은 만큼 만족스러웠습니다.
'Project > MOOC' 카테고리의 다른 글
Data Science Specialization 전부 수료 및 Data Science Capstone 수료 (10) | 2016.05.13 |
---|---|
MOOC Specialization 'Data Science' Course 수료 (1) | 2016.03.27 |
2016년 2, 3번째 Coursera 수료증 취득 (1) | 2016.02.18 |
2016년 첫 Coursera 수료증 취득 (2) | 2016.01.28 |
Coursera 10번째 수료증 취득! (4) | 2016.01.12 |