- 大数据分析有用的资源
- 大数据分析 - 快速指南
- 大数据分析 - 资源
- 大数据分析 - 讨论
大数据分析 - 文本分析
在本章中,我们将使用本书第 1 部分中抓取的数据。该数据包含描述自由职业者概况的文本,以及他们以美元收取的小时费率。下一节的想法是拟合一个模型,根据自由职业者的技能,我们能够预测其时薪。
以下代码显示了如何转换原始文本,在本例中,原始文本具有词袋矩阵中的用户技能。为此,我们使用一个名为 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
现在我们有了一个模型,给定一组技能就能够预测自由职业者的时薪。如果收集更多数据,模型的性能将会提高,但实现此管道的代码将是相同的。