안드로이드 기기를 사용하는 단위테스트 첫발 안드로이드 프로그램을 처음으로 짜보게 되었다. 단위테스트를 사용하기 위해 JAVA 프로그램을 제작할 때 하듯이 했는데, 간단한 단위테스트는 문제가 없었지만, 기기를 이용해야 되는 경우에는 구현이 까다로왔다. 예를 들면 리소스파일을 읽어오는 테스트... 우선 인터넷에 검색된 문서들의 경우, 제안된 TestCase 클래스들 'AndroidTestCase' 혹은 'ApplicationTestCase' 들은 모두 사라질(deprecated) 상태였다. 이리저리 살펴본 결과 1. 'src/androidTest/java' 디렉토리 아래에 단위테스트 클래스를 반드시 놓아야 했다.2. class annotation @RunWith를 아래와 같이 넣어야 한다.@RunWith(AndroidJUnit4.class) publ.. 더보기 기계학습 - Spark(8) - PCA 코드분석1 Spark의 기계학습 교육사이트의 나머지 부분은 평이한 내용들이지만, 그중에 ngram과 PCA는 흥미로웠다. ngram은 개요만 읽어도 이해하는데 충분했다. PCA는 N차원의 벡터를 N보다 같거나 작은 차원의 벡터로 변한하는 것인데, 어떻게 구현이 되는지가 궁금했고, word2vec을 이해할 때와 만찬가지로 직접 구현 소스 코드를 분석해보기로 했다. 먼저 spark사이트에 나온 샘플예제는 최신버전에서 약간 문법오류가 있어보여 수정한 코드를 아래에 적는다.import org.apache.spark.ml.feature.PCAimport org.apache.spark.ml.linalg.Vectors val data = Array( Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))),.. 더보기 기계학습 - Spark(7) - Word2Vec 코드분석 완결 지금까지 스파크 소스코드 분석을 통해 이해한 word2vec작동 원리에 대한 정리글을 올린다. word2vec은 아주 많은 양의 문장을 사용한 학습을 통해 단어들마다 고유의 벡터값을 산정하는데, 그 값에 따르면 유사한 성격의 단어들이 어느 한 지점에 몰리는 것을 볼 수 있다. 그러나 학습은 단어간의 연관성을 문장에서 서로 가까운 위치에 놓여 있는지에 따라 정해지기 때문에 한계도 있다. word2vec은 크게 두 단계로 나뉜다. 첫번째는 문장들의 단어들을 추려 빈도수에 따라 이진 트리를 구성하는 것이고, 두번째는 본격적으로 학습을 행하는 것이다. 1. 이진트리 구성 위의 그림은 이진트리를 구성할 때 사용하는 빈도수가 어떻게 적용되는지를 보여준다. 이 이진 트리는 소위 인공지능을 이용한 여러 이론에서 애용되.. 더보기 기계학습 - Spark(6) - Word2Vec, 학습하는 부분 코드 분석2 코딩 조금하는 놈이 적은 지식을 갖고 직관에 상당히 의존해서 Word2Vec 스칼라 구현코드를 분석하는 글이다. 따라서 이 글은 틀릴 수 있다. 이번회는 지난회의 다듬어지지 않은 생각이 한층 정리된 글이다. 결론에 가기전에 벡터 스칼라곱과 y'=ax + y를 처리하는 saxpy(Scalar Alpha X Plus Y)함수의 의미를 추리해 본다. 1. 스칼라곱은 아래처럼 다른 식으로 표현 가능한데. cos값의 성질에 따라 두 벡터의 내각이 90도 이내면 양수, 90도이면 0, 90~270이내면 음수, 270도이면 0 ... 등이 된다. 따라서 이 값은 정반대의 벡터의 곱부터 직교하는 벡터의 곱을 거쳐 같은 방향의 벡터 곱까지이다. 2. saxpy함수는 알파값과 매개변수로 2개의 배열을 받는데 앞의 배열 값.. 더보기 기계학습 - Spark(5) - Word2Vec, 학습하는 부분 코드 분석 이런 저런 주변의 일을 처리하고, 다시 Word2Vec.scala 소스코드중에서 학습을 하는 부분을 분석해봤다. 기반 지식에 대한 이해도 부족한 상황에서 직관에 상당히 의존하며 분석했다. 따라서 이 글은 틀린 내용을 담고 있을 수 있다. 학습은 전체에서 사용되는 상당히 큰 배열 (단어수 x 벡터차원수)과 부분적으로 사용되는 배열(벡터차원수)가 사용된다. 하나의 문장단위로 순서대로 학습을 하는데, 문장마다 첫 단어부터 마지막 단어까지 순서대로 학습한다. 일단 이 것만으로도 2중 반복문이다. 그리고 각각의 단어마다 앞, 뒤로 위치한 단어들을 추려서 학습하는데, 추리는 단어의 수는 정해져 있고, 다만 앞으로 몇번째 단어부터 처리할 것인지를 랜덤하게 선택한다. 위의 그림속의 문장을 보면, federal이라는 단.. 더보기 git 레포지토리에서 변경된 파일들중에서 원하는 파일들만 추리기 git 레포지토리에서 변경된 파일들을 모아서 제출할 필요가 있어서 사용한 명령어이다. $ git diff --name-only b847612f65a9d9024d5d943500ea0be502668341 HEAD | grep 'cc\|cpp\|h$' | xargs tar czf changed.tgz 먼저 git 레포지토리에서 변경된 파일만 찾아 파일명들을 출력하는 명령은 다움과 같다git diff --name-only commit-id commit-idcommit-id에는 HEAD 와 같은 예약어를 쓸 수 있다. 두번째 grep문장을 통해 원하는 확장자를 갖는 것들만 추리게 된다. grep의 정규식 규약을 따랐다. '$'는 행의 끝은 의미한다. 정규식의 의미는 cc 혹은 cpp 혹은 h로 끝나는 행(줄)만을.. 더보기 벽걸이 컴퓨터 이런 생각들이 참 좋다. 그리고 이런 생각을 실행하는 모습도 참 좋다.[출처:https://9gag.com/gag/aMGWZb1?sc=geeky] 더보기 이전 1 2 3 4 5 6 다음