小编Kra*_*ntz的帖子

如何在R数据帧中用零替换NA值?

我有一个数据框,有些列有NA值.

如何NA用零替换这些值?

r missing-data dataframe na imputation

673
推荐指数
18
解决办法
112万
查看次数

如何在scikit-learn中对SVM应用标准化?

我正在使用当前稳定版0.13的scikit-learn.我正在使用类将线性支持向量分类器应用于某些数据sklearn.svm.LinearSVC.

关于 scikit-learn文档中的预处理章节中,我已经阅读了以下内容:

在学习算法的目标函数中使用的许多元素(例如支持向量机的RBF内核或线性模型的l1和l2正则化器)假设所有特征都以零为中心并且具有相同顺序的方差.如果某个要素的方差比其他要大一个数量级,那么它可能会主导目标函数并使估算工具无法按预期正确地学习其他要素.

问题1:标准化对于SVM通常是否有用,对于那些具有线性内核函数的人来说也是如此?

问题2:据我所知,我必须计算训练数据的均值和标准差,并使用该类对测试数据应用相同的转换sklearn.preprocessing.StandardScaler.但是,我不明白的是,在将训练数据提供给SVM分类器之前,我是否还必须转换训练数据或仅转换测试数据.

也就是说,我必须这样做:

scaler = StandardScaler()
scaler.fit(X_train)                # only compute mean and std here
X_test = scaler.transform(X_test)  # perform standardization by centering and scaling

clf = LinearSVC()
clf.fit(X_train, y_train)
clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

或者我必须这样做:

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)  # compute mean, std and transform training data as well
X_test = scaler.transform(X_test)  # same as above

clf = LinearSVC()
clf.fit(X_train, y_train)
clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

简而言之,我是否必须使用scaler.fit(X_train)或使用scaler.fit_transform(X_train)训练数据才能获得合理的结果 …

python classification normalization svm scikit-learn

25
推荐指数
2
解决办法
2万
查看次数

使用线性内核的svm最好用在哪里?

我目前正在研究svm,并想知道svm对线性内核的应用是什么.在我看来,它必须适用于解决线性优化问题.它是否正确?

我感谢你的回答!

classification machine-learning mathematical-optimization svm

20
推荐指数
1
解决办法
2万
查看次数

ImportError:无法导入名称'Timestamp'

我使用下面的代码在我的python 3.6.3中成功安装了ggplot:

conda install -c conda-forge ggplot 
Run Code Online (Sandbox Code Playgroud)

但是当我使用下面的代码在我的笔记本中导入它时,我收到一个错误:

from ggplot import *
ImportError: cannot import name 'Timestamp'
Run Code Online (Sandbox Code Playgroud)

如果我能解决这个问题,我将不胜感激.

python ggplot2 python-ggplot

20
推荐指数
3
解决办法
2万
查看次数

在R中的选定列中将所有NA替换为FALSE

我有类似的问题这一个,但我的数据集是有点大:50列与1列UID等栏目,无论是携带TRUE还是NA,我想改变一切NAFALSE,但我不希望使用显式循环.

可以plyr做到的伎俩?谢谢.

更新#1

感谢您的快速回复,但如果我的数据集如下所示:

df <- data.frame(
  id = c(rep(1:19),NA),
  x1 = sample(c(NA,TRUE), 20, replace = TRUE),
  x2 = sample(c(NA,TRUE), 20, replace = TRUE)
)
Run Code Online (Sandbox Code Playgroud)

我只想要X1X2被处理,如何做到这一点?

r missing-data dataframe na imputation

18
推荐指数
3
解决办法
3万
查看次数

xgboost二进制逻辑回归

我在使用xgboost运行逻辑回归时遇到问题,可以在下面的示例中进行总结.

让我们假设我有一个非常简单的数据框,有两个预测变量和一个目标变量:

df= pd.DataFrame({'X1' : pd.Series([1,0,0,1]), 'X2' : pd.Series([0,1,1,0]), 'Y' : pd.Series([0,1,1,0], )})
Run Code Online (Sandbox Code Playgroud)

我可以发布图像,因为我是新来的,但我们可以清楚地看到,当X1 = 1且X2 = 0时,Y为0,当X1 = 0且X2 = 1时,Y为1.

我的想法是构建一个输出观察属于每个类的概率的模型,所以如果我运行xgboost试图预测两个新观察(1,0)和(0,1),如下所示:

X = df[['X1','X2']].values            
y = df['Y'].values

params  = {'objective': 'binary:logistic',
          'num_class': 2
          } 

clf1 = xgb.train(params=params, dtrain=xgb.DMatrix(X, y), num_boost_round=100)                    
clf1.predict(xgb.DMatrix(test.values)) 
Run Code Online (Sandbox Code Playgroud)

输出是:

array([[ 0.5,  0.5],
       [ 0.5,  0.5]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

我想,这意味着,对于第一次观察,它有50%的可能性属于每个类.

我想知道为什么算法输出一个正确的(1,0)或更接近于如果变量之间的关系是明确的.

仅供参考,我确实尝试过更多数据(为简单起见,我只使用了4行)并且行为几乎相同; 我注意到的是,不仅概率不总和为1,它们通常都非常小:(这个结果在不同的数据集上,与上面的例子无关)

array([[ 0.00356463,  0.00277259],
       [ 0.00315137,  0.00268578],
       [ 0.00453343,  0.00157113],
Run Code Online (Sandbox Code Playgroud)

python regression machine-learning logistic-regression xgboost

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

如何将权重纳入WinBUGS模型的可能性

我想将权重结合到WINBUGS模型brms用权重做的可能性中.

通常的BUGS方法来实现这一目标dnorm并且dpois不起作用dbin.

正如@ paul.buerkner 在这里所说的那样,这是用这样的Stan代码完成的:

vector[N] weights; \\ model weights 
target += weights[n] * neg_binommial_2_log_lpmf(Y[n] | mu[n], shape);
Run Code Online (Sandbox Code Playgroud)

当我在我的BUGS模型中实现这种方法时,我得到下面的详细错误(参见编辑).

以下是数据和模型:

library(R2WinBUGS)
dat <- data.frame(
  A = c(1, 1, 0, 0), B = c(1, 0, 1, 0),
  Pass = c(278, 100, 153, 79), Fail = c(743, 581, 1232, 1731), Weights= c(3, 1, 12, 3))
N <- length(dat$Pass)
case <- dat$Pass
nn <- dat$Fail+dat$Pass
A <- dat$A
B <- dat$B
data …
Run Code Online (Sandbox Code Playgroud)

r bayesian winbugs rstan

9
推荐指数
0
解决办法
353
查看次数

R:用向量中的项替换NA

我试图用我的数据中的一些缺失值替换来自类似组的平均值.

我的数据如下:

   X   Y
1  x   y
2  x   y
3  NA  y
4  x   y
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

  X   Y
1  x   y
2  x   y
3  y   y
4  x   y
Run Code Online (Sandbox Code Playgroud)

我写了这个,它有效

for(i in 1:nrow(data.frame){
   if( is.na(data.frame$X[i]) == TRUE){
       data.frame$X[i] <- data.frame$Y[i]
   }
  }
Run Code Online (Sandbox Code Playgroud)

但是我的data.frame几乎有五十万行,而for/if语句非常慢.我想要的是类似的东西

is.na(data.frame$X) <- data.frame$Y
Run Code Online (Sandbox Code Playgroud)

但这会导致不匹配的大小错误.似乎应该有一个命令来执行此操作,但我无法在SO或R帮助列表中找到它.有任何想法吗?

replace r missing-data imputation

8
推荐指数
2
解决办法
1万
查看次数

R使用fread colClasses或跳过参数来读取没有列标题的csv

我想能够跳过被读成R经由列data.tablefread在v1.8.9功能.但我正在阅读的csv,没有列标题...这似乎是一个问题的fread ...有没有办法只指定我不想要特定的列?

是否更好地预先分配一个列名,然后让它读取它以便可以跳过它?

举个例子......

我从以下URL下载了数据

http://www.truefx.com/dev/data/2013/MAY-2013/AUDUSD-2013-05.zip

拉开它......

并使用fread将csv读入R并且它与csv扩展名具有几乎相同的文件名.

system.time(pp <- fread("AUDUSD-2013-05.csv",sep=","))
  user  system elapsed 
16.427   0.257  16.682 

head(pp)
       V1                    V2      V3      V4
1: AUD/USD 20130501 00:00:04.728 1.03693 1.03721
2: AUD/USD 20130501 00:00:21.540 1.03695 1.03721
3: AUD/USD 20130501 00:00:33.789 1.03694 1.03721
4: AUD/USD 20130501 00:00:37.499 1.03692 1.03724
5: AUD/USD 20130501 00:00:37.524 1.03697 1.03719
6: AUD/USD 20130501 00:00:39.789 1.03697 1.03717

str(pp)
Classes ‘data.table’ and 'data.frame':  4060762 obs. of  4 variables:
$ V1: chr  "AUD/USD" "AUD/USD" "AUD/USD" "AUD/USD" ... …
Run Code Online (Sandbox Code Playgroud)

r fread data.table import-csv

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

fread in R将一个大的.csv文件作为一行数据框导入

我正在将一个大的.csv文件导入R(大约50万行),所以我一直在尝试使用data.table包中的fread()作为read.table()和read.csv( ).但是,fread()返回一个数据框,其中包含一行内行中的所有数据,即使它具有正确的列数.我发现2013年的错误报告显示这与integer64数据类有关:

http://r-forge.r-project.org/tracker/index.php?func=detail&aid=2786&group_id=240&atid=975

是否有任何修复或方法来解决这个问题?

我正在尝试读取的.csv文件完全是整数,范围从0到10000,没有丢失的数据.我在Windows 7计算机上使用R版本2.15.2,版本1.8.8的data.table包.

我正在运行的代码是:

require(data.table)
fread("pre2012_alldatapoints.csv", sep = ",", header= TRUE)-> pre
head(pre)

1: 1 22 -105 22 -105
2: 2 22 -105 22 -105
3: 3 20 -105 20 -105
4: 4 21 -105 21 -105
5: 5 21 -105 21 -105
6: 6 21 -105 21 -105

dim(pre)
[1] 12299  5 #dim returns the correct number of dimensions
#this is a subset of the file I want to import that I've confirmed imports correctly with …
Run Code Online (Sandbox Code Playgroud)

import r data.table import-csv

8
推荐指数
1
解决办法
3万
查看次数