我有一个数据框,有些列有NA值.
如何NA用零替换这些值?
我正在使用当前稳定版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)训练数据才能获得合理的结果 …
我目前正在研究svm,并想知道svm对线性内核的应用是什么.在我看来,它必须适用于解决线性优化问题.它是否正确?
我感谢你的回答!
classification machine-learning mathematical-optimization svm
我使用下面的代码在我的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)
如果我能解决这个问题,我将不胜感激.
我有类似的问题这一个,但我的数据集是有点大:50列与1列UID等栏目,无论是携带TRUE还是NA,我想改变一切NA到FALSE,但我不希望使用显式循环.
可以plyr做到的伎俩?谢谢.
感谢您的快速回复,但如果我的数据集如下所示:
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)
我只想要X1和X2被处理,如何做到这一点?
我在使用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
我想将权重结合到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) 我试图用我的数据中的一些缺失值替换来自类似组的平均值.
我的数据如下:
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帮助列表中找到它.有任何想法吗?
我想能够跳过被读成R经由列data.table的fread在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) 我正在将一个大的.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) r ×6
imputation ×3
missing-data ×3
python ×3
data.table ×2
dataframe ×2
import-csv ×2
na ×2
svm ×2
bayesian ×1
fread ×1
ggplot2 ×1
import ×1
regression ×1
replace ×1
rstan ×1
scikit-learn ×1
winbugs ×1
xgboost ×1