小编Eun*_*ice的帖子

如何使用biglm超过2 ^ 31观察

我正在处理包含超过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)

如何解决这个溢出问题?在此先感谢您的帮助!

r bigdata

5
推荐指数
1
解决办法
562
查看次数

cross_val_predict之后对新文档进行分类

我有大约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再次使用,但是由于类是我要预测的内容,因此我不确定在第三个参数中输入什么。

预先感谢您的所有帮助!

python twitter classification machine-learning scikit-learn

1
推荐指数
1
解决办法
524
查看次数