การวิเคราะห์ข้อมูลขนาดใหญ่ - การวิเคราะห์ข้อความ
ในบทนี้เราจะใช้ข้อมูลที่คัดลอกมาในส่วนที่ 1 ของหนังสือ ข้อมูลมีข้อความที่อธิบายโปรไฟล์ของฟรีแลนซ์และอัตรารายชั่วโมงที่พวกเขาเรียกเก็บเป็น USD แนวคิดของส่วนต่อไปนี้คือเพื่อให้เหมาะกับรูปแบบที่กำหนดทักษะของนักแปลอิสระเราสามารถคาดเดาเงินเดือนรายชั่วโมงได้
รหัสต่อไปนี้แสดงวิธีการแปลงข้อความดิบที่ในกรณีนี้มีทักษะของผู้ใช้ในเมทริกซ์ถุงคำ สำหรับสิ่งนี้เราใช้ห้องสมุด R ชื่อ tm ซึ่งหมายความว่าสำหรับแต่ละคำในคลังข้อมูลเราจะสร้างตัวแปรตามจำนวนครั้งที่เกิดขึ้นของแต่ละตัวแปร
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
ตอนนี้เรามีโมเดลที่ให้ชุดทักษะที่สามารถทำนายเงินเดือนรายชั่วโมงของฟรีแลนซ์ได้ หากมีการรวบรวมข้อมูลมากขึ้นประสิทธิภาพของโมเดลจะดีขึ้น แต่โค้ดสำหรับใช้ไปป์ไลน์นี้จะเหมือนกัน