Büyük Veri Analitiği - Metin Analitiği
Bu bölümde, kitabın 1. bölümünde kazınan verileri kullanacağız. Veriler, serbest çalışanların profillerini ve USD cinsinden ücretlendirdikleri saatlik ücreti açıklayan bir metne sahiptir. Aşağıdaki bölümün fikri, bir serbest meslek sahibinin becerilerini göz önünde bulunduran bir modele uymaktır, saatlik maaşını tahmin edebiliyoruz.
Aşağıdaki kod, bu durumda kullanıcının becerilerine sahip olan ham metnin nasıl bir kelime matrisi torbasına dönüştürüleceğini gösterir. Bunun için tm adlı bir R kütüphanesi kullanıyoruz. Bu, derlemedeki her kelime için, her değişkenin gerçekleşme miktarıyla değişken oluşturduğumuz anlamına gelir.
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)
Artık seyrek bir matris olarak temsil edilen metne sahip olduğumuza göre, seyrek bir çözüm verecek bir model sığdırabiliriz. Bu durum için iyi bir alternatif, LASSO (en az mutlak büzülme ve seçim operatörü) kullanmaktır. Bu, hedefi tahmin etmek için en uygun özellikleri seçebilen bir regresyon modelidir.
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
Şimdi, bir serbest meslek sahibinin saatlik maaşını tahmin edebilen bir dizi beceri verilen bir modelimiz var. Daha fazla veri toplanırsa, modelin performansı artacaktır, ancak bu ardışık düzeni uygulayacak kod aynı olacaktır.