빅 데이터 분석-텍스트 분석

이 장에서는 책의 1 부에서 긁어 낸 데이터를 사용합니다. 데이터에는 프리랜서의 프로필과 그들이 부과하는 시간당 요금이 USD로 설명 된 텍스트가 있습니다. 다음 섹션의 아이디어는 프리랜서의 기술을 고려하여 시간당 급여를 예측할 수있는 모델을 맞추는 것입니다.

다음 코드는이 경우 단어 모음 매트릭스에서 사용자의 기술이있는 원시 텍스트를 변환하는 방법을 보여줍니다. 이를 위해 tm이라는 R 라이브러리를 사용합니다. 이것은 말뭉치의 각 단어에 대해 각 변수의 발생 횟수로 변수를 생성한다는 것을 의미합니다.

library(tm)
library(data.table)  

source('text_analytics/text_analytics_functions.R') 
data = fread('text_analytics/data/profiles.txt') 
rate = as.numeric(data$rate) 
keep = !is.na(rate) 
rate = rate[keep]  

### Make bag of words of title and body 
X_all = bag_words(data$user_skills[keep]) 
X_all = removeSparseTerms(X_all, 0.999) 
X_all 

# <<DocumentTermMatrix (documents: 389, terms: 1422)>> 
#   Non-/sparse entries: 4057/549101 
# Sparsity           : 99% 
# Maximal term length: 80 
# Weighting          : term frequency - inverse document frequency (normalized) (tf-idf) 

### Make a sparse matrix with all the data 
X_all <- as_sparseMatrix(X_all)

이제 희소 행렬로 표시된 텍스트가 있으므로 희소 솔루션을 제공하는 모델을 맞출 수 있습니다. 이 경우에 대한 좋은 대안은 LASSO (최소 절대 축소 및 선택 연산자)를 사용하는 것입니다. 목표를 예측하기 위해 가장 관련성이 높은 특징을 선택할 수있는 회귀 모델입니다.

train_inx = 1:200
X_train = X_all[train_inx, ] 
y_train = rate[train_inx]  
X_test = X_all[-train_inx, ] 
y_test = rate[-train_inx]  

# Train a regression model 
library(glmnet) 
fit <- cv.glmnet(x = X_train, y = y_train,  
   family = 'gaussian', alpha = 1,  
   nfolds = 3, type.measure = 'mae') 
plot(fit)  

# Make predictions 
predictions = predict(fit, newx = X_test) 
predictions = as.vector(predictions[,1]) 
head(predictions)  

# 36.23598 36.43046 51.69786 26.06811 35.13185 37.66367 
# We can compute the mean absolute error for the test data 
mean(abs(y_test - predictions)) 
# 15.02175

이제 우리는 일련의 기술이 프리랜서의 시간당 급여를 예측할 수있는 모델을 가지고 있습니다. 더 많은 데이터가 수집되면 모델의 성능이 향상되지만이 파이프 라인을 구현하는 코드는 동일합니다.