我正在处理包含超过2 ^ 31个观测值的大量数据.实际观测数接近35亿次观测.
我使用R包"biglm"来运行大约70个预测变量的回归.我一次读取数据一百万行并更新回归结果.数据已使用R库"ffdf"以ffdf格式保存,以便快速加载并避免耗尽所有RAM.
这是我正在使用的代码的基本概要:
library(ff,ffbase,biglm)
load.ffdf(dir='home')
dim(data) #the ffdf contains about 70 predictors and 3.5 billion rows
chunk_1 <- data[1:1000000,]
rest_of_data <- data[1000000:nrow(data),]
# Running biglm for first chunk
b <- biglm(y~x1+x2+...+x70, chunk_1)
chunks <- ceiling((nrow(rest_of_data)/1000000)
# Updating biglm results by iterating through the rest of the data chunks
for (i in seq(1,chunks)){
start <- 1+((i-1))*1000000
end <- min(i*1000000,nrow(d))
d_chunk <- d[start:end,]
b<-update(b,d_chunk)
}
Run Code Online (Sandbox Code Playgroud)
结果看起来很棒,一切都在顺利进行,直到用每个数据块更新模型的累计观测数超过2 ^ 31个观测值.然后,我得到一个错误,读取
In object$n + NROW(mm) : NAs produced by integer overflow
Run Code Online (Sandbox Code Playgroud)
如何解决这个溢出问题?在此先感谢您的帮助!
我有大约10,000条推文的样本,我希望将其分类为“相关”和“不相关”。我正在为此模型使用Python的scikit-learn。我手动将1,000条推文编码为“相关”或“不相关”。然后,我使用80%的手动编码数据作为训练数据,其余的作为测试数据运行了SVM模型。我获得了良好的结果(预测准确度〜0.90),但是为了避免过度拟合,我决定对所有1,000条手动编码的推文使用交叉验证。
下面是我的代码,已经为示例中的推文获取了tf-idf矩阵。“目标”是一个数组,列出了该推文是否标记为“相关”或“不相关”。
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
clf = SGDClassifier()
scores = cross_val_score(clf, X_tfidf, target, cv=10)
predicted = cross_val_predict(clf, X_tfidf, target, cv=10)
Run Code Online (Sandbox Code Playgroud)
通过此代码,我可以预测1,000条推文所属的类,并将其与我的手动编码进行比较。
为了继续使用模型对我没有手动编码的其他约9000条推文进行分类,我坚持下一步要做的事情。我当时在考虑cross_val_predict再次使用,但是由于类是我要预测的内容,因此我不确定在第三个参数中输入什么。
预先感谢您的所有帮助!