Big-data-analytics-text-analytics

提供:Dev Guides
移動先:案内検索

ビッグデータ分析-テキスト分析

この章では、本のパート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

これで、一連のスキルがフリーランサーの時間給を予測できるモデルができました。 より多くのデータが収集されると、モデルのパフォーマンスは向上しますが、このパイプラインを実装するコードは同じになります。