내용
Spark Doc 의 샘플 소스를 참고하여 Pipelines를 이용해 예측모델을 생성하고 이를, 통해서 결과를 확인해 보자.
|
사용법
▶Pipieline은 일련의 Transformer와 Estimator 객체를 나타내며, 이 일련의 객체를 하나의 입력 SchemaRDD에 순차적으로 적용하여 하나의 Model을 출력 ▶산출물이 Model이기 때문에 Pipeline은 그 자체로 Estimator이기도 하다. |
위의 그림에서 Tokenizer, HashingTF, Logistic Regression Model이 뭔지 모르는 분들을 위해
Tokenizer는 간단히 말하자면 문장이나 글을 띄워 쓰기 단위로 단어로 분리하는 것으로 생각하면 되고, HashingTF는 각 문장에서 단어가 등장하는 빈도를 해쉬값으로 변환하는 것으로, (참고1) TF: 하나의 문서에서 단어가 등장하는 빈도 (참고2) HashingTF: 문서로부터 주어진 길이의 TF를 계산 각 단어의 해쉬값을 주어진 벡터크기로 나누고,나머지 값에 해당되는 곳에 매핑 Logistic Regression Model은 로지스틱 회귀로 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용되는 통계 기법 모델이다.
|
이제 Pipieline로 모델을 만들어 보자.
그전에 샘플이 필요하다. 샘플을 만드는데 데이터 내용 과 스키마 가 필요하다.
이 말은 뭐냐!
어떤 샘플 데이터들이 1)고유 문서 아이디, 2)내용, 3)문서 종류 로 표현된다면 학습시킬 데이터는 아래처럼 만들 수 있다.
Training 데이터
문서종류는 문장에 "테스트"라는 단어가 들어가면 1.0종류문서 없으면 0.0종류문서로 구분하였고 그리고 첫번째 내용인 0L, 1L .. 은 1)고유 문서 아이디 id를 표현하고 Long 타입이며 두번째는 2)내용 문장으로 String타입이라고 명시하였으며 다음도 비슷하다 List<Row> dataTraining = Arrays.asList( Dataset<Row> training = spark.createDataFrame(dataTraining, train_schema); |
이제 테스트 데이터를 만들어 보자.
Test 데이터
테스트 데이터는 Training 데이터와 비교하여 3)문서 종류에 대한 정보가 없다. 이는 나중에 모델을 생성하여 예측하게 된다. 생성한 예제는 아래와 같다. List<Row> dataTest = Arrays.asList( Dataset<Row> test = spark.createDataFrame(dataTest, test_schema); |
모델을 만들어 보자.
맨 처음 나오는 그림과 동일한 방법으로 Pipeline을 만들어 보자.
[1번단계] 샘플은 id, text, label 이란 구조로 되어 있고 아래의 내용은 이 데이터에서 text라는 내용을 선택하여 띄워 쓰기 구분으로 단어로 자르고 이를 words라는 컬럼에 담는다. Tokenizer tokenizer = new Tokenizer() [2번단계] 단어 발생 빈도를 헤쉬값으로 나타내는데 Tokenizer의 결과를 넣어서 결과를 features라는 컬럼에 담는다. HashingTF hashingTF = new HashingTF() [3번단계] 알고리즘으로 로지스틱 회귀를 사용하겠다. LogisticRegression lr = new LogisticRegression() [1번-2번-3번 과정을 연결] Pipeline pipeline = new Pipeline()
[1번-2번-3번 과정을 연결한 Pipeline에 Training Data를 넣어서 모델 생성] PipelineModel model = pipeline.fit(training);
모델이 생성되었다. |
이제 예측을 진행해 보자.
과연 문장에 "테스트"라는 단어가 있으면 1.0으로 구분 할 것인가?
테스트 데이터를 모델에 넣고 결과를 predictions에 담는다. Dataset<Row> predictions = model.transform(test);
|
결과를 출력해 보면
(4, 이제 테스트 시작해 봅시다) prediction=1.0
|
위와 같은 결과를 얻을 수 있고
처음 예상한데로 "테스트"라는 단어가 있는 문장은 1.0으로 예상하였다.
'데이터 분석' 카테고리의 다른 글
Spark - Correlations (1) (0) | 2017.06.21 |
---|---|
Discrete Cosine Transform (1) | 2017.06.21 |
Spark - Multilayer perceptron classifier (0) | 2017.05.24 |
Spark - Random Forest Regression (0) | 2017.05.24 |
Spark - Random Forest Classification (3) | 2017.05.23 |