如果我在回归中使用二进制解释变量,如何告诉R使用某个级别作为参考?
它只是默认使用某个级别.
lm(x ~ y + as.factor(b))
Run Code Online (Sandbox Code Playgroud)
与b {0, 1, 2, 3, 4}
.假设我想使用3而不是R使用的零.
regression r linear-regression categorical-data dummy-variable
我正在学习不同的方法来将分类变量转换为机器学习分类器的数字.我遇到了这个pd.get_dummies
方法,sklearn.preprocessing.OneHotEncoder()
我想看看它们在性能和使用方面有何不同.
我找到了一个关于如何OneHotEnocder()
在https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/上使用的教程,因为该sklearn
文件并没有这个功能也很有帮助.我有一种感觉,我没有正确地做到这一点......但是
有人可以解释使用pd.dummies
过的优点和缺点,sklearn.preprocessing.OneHotEncoder()
反之亦然吗?我知道这OneHotEncoder()
给你一个稀疏矩阵但除此之外我不确定它是如何使用的,以及该pandas
方法的好处是什么.我用它效率不高吗?
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
sns.set()
%matplotlib inline
#Iris Plot
iris = load_iris()
n_samples, m_features = iris.data.shape
#Load Data
X, y = iris.data, iris.target
D_target_dummy = dict(zip(np.arange(iris.target_names.shape[0]), iris.target_names))
DF_data = pd.DataFrame(X,columns=iris.feature_names)
DF_data["target"] = pd.Series(y).map(D_target_dummy)
#sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \
#0 5.1 3.5 1.4 …
Run Code Online (Sandbox Code Playgroud) 我有一组数据框,其中一列包含一个分类变量.我想将它转换为几个虚拟变量,在这种情况下我通常会使用get_dummies
.
会发生什么是get_dummies
查看每个数据帧中可用的数据以找出有多少类别,从而创建适当数量的虚拟变量.但是,在我现在正在工作的问题中,我实际上事先知道可能的类别是什么.但是,当单独查看每个数据框时,并非所有类别都必须出现.
我的问题是:有没有办法传递get_dummies
(或等效函数)类别的名称,这样,对于没有出现在给定数据框中的类别,它只是创建一个0的列?
会有这样的东西:
categories = ['a', 'b', 'c']
cat
1 a
2 b
3 a
Run Code Online (Sandbox Code Playgroud)
成为这个:
cat_a cat_b cat_c
1 1 0 0
2 0 1 0
3 1 0 0
Run Code Online (Sandbox Code Playgroud) 我正在使用两个单独的培训和测试集在python中构建预测模型.训练数据包含数字类型分类变量,例如邮政编码,[91521,23151,12355,...],以及字符串分类变量,例如,城市['芝加哥','纽约','洛杉矶', ...].
为了训练数据,我首先使用'pd.get_dummies'来获取这些变量的虚拟变量,然后使用转换的训练数据拟合模型.
我对测试数据进行相同的转换,并使用训练模型预测结果.但是,我收到错误'ValueError:模型的功能数必须与输入匹配.模型n_features为1487,输入n_features为1345'.原因是测试数据中的虚拟变量较少,因为它具有较少的"城市"和"邮政编码".
我怎么解决这个问题?例如,'OneHotEncoder'将仅编码所有数字类型的分类变量.'DictVectorizer()'只会编码所有字符串类型的分类变量.我在线搜索并看到一些类似的问题,但没有一个真正解决我的问题.
https://www.quora.com/What-is-the-best-way-to-do-a-binary-one-hot-one-of-K-coding-in-Python
我正在使用R中的一个非常大的数据集,并且已经使用数据框进行操作,并决定切换到data.tables以帮助加快操作.我无法理解J操作,特别是我正在尝试生成虚拟变量,但我无法弄清楚如何在data.tables []中编写条件操作.
MWE:
test <- data.table("index"=rep(letters[1:10],100),"var1"=rnorm(1000,0,1))
Run Code Online (Sandbox Code Playgroud)
我想这样做是为了添加列a
通过j
为虚拟变量,该列a
将有一个值1
时,index == "a"
和0
其他.在data.frame环境中,它看起来像:
test$a <- 0
test$a[test$index=='a'] <- 1
Run Code Online (Sandbox Code Playgroud) pandas.get_dummies
每个分类值发出一个虚拟变量.是否有一些自动,简单的方法要求它只创建N-1虚拟变量?(只是随意摆脱一个"基线"变量)?
需要避免我们的数据集中的共线性.
我有以下数据帧:
amount catcode cid cycle date di feccandid type
0 1000 E1600 N00029285 2014 2014-05-15 D H8TX22107 24K
1 5000 G4600 N00026722 2014 2013-10-22 D H4TX28046 24K
2 4 C2100 N00030676 2014 2014-03-26 D H0MO07113 24Z
Run Code Online (Sandbox Code Playgroud)
我想为列中的值创建虚拟变量type
.大约15岁.我试过这个:
pd.get_dummies(df['type'])
它返回:
24A 24C 24E 24F 24K 24N 24P 24R 24Z
date
2014-05-15 0 0 0 0 1 0 0 0 0
2013-10-22 0 0 0 0 1 0 0 0 0
2014-03-26 0 0 0 0 0 0 0 0 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试按组汇总数据集,以使用虚拟列来确定每个组的值是否出现在数据的未分组的最常见值中。
作为示例,让我们flights
从 中获取数据nycflights13
。
library(dplyr, warn.conflicts = FALSE)
library(nycflights13)
my_flights_raw <-
flights %>%
select(carrier, month, dest)
my_flights_raw
#> # A tibble: 336,776 x 3
#> carrier month dest
#> <chr> <int> <chr>
#> 1 UA 1 IAH
#> 2 UA 1 IAH
#> 3 AA 1 MIA
#> 4 B6 1 BQN
#> 5 DL 1 ATL
#> 6 UA 1 ORD
#> 7 B6 1 FLL
#> 8 EV 1 IAD
#> 9 B6 …
Run Code Online (Sandbox Code Playgroud) 如何在sk-learn中处理标签编码的未知值?只有在检测到新标签时,标签编码器才会爆炸.
我想要的是通过one-hot -encoder 对分类变量进行编码.但是,sk-learn不支持字符串.所以我在每列上都使用了标签编码器.
我的问题是,在我的交叉验证步骤中,管道中出现了未知标签.基本的单热编码器可以选择忽略这种情况.apriori pandas.getDummies /cat.codes
是不够的,因为管道应该使用可能包含未知标签的真实,新鲜的传入数据.
是否有可能CountVectorizer
为此目的使用?
我的问题是关于先前回答的关于将多个虚拟变量组合成单个分类变量的问题的详细说明.
在之前提出的问题中,分类变量是从非互斥的虚拟变量创建的.对于我的情况,我的虚拟变量是相互排斥的,因为它们代表了2X2主体间因子设计中的交叉实验条件(也有一个内部主题组件,我在这里没有解决),所以我不认为我做了interaction
什么需要做.
例如,我的数据可能如下所示:
id conditionA conditionB conditionC conditionD
1 NA 1 NA NA
2 1 NA NA NA
3 NA NA 1 NA
4 NA NA NA 1
5 NA 2 NA NA
6 2 NA NA NA
7 NA NA 2 NA
8 NA NA NA 2
Run Code Online (Sandbox Code Playgroud)
我现在想制作结合ACROSS不同类型条件的分类变量.例如,具有条件A和B的值的人可能使用一个分类变量编码,并且具有条件C和D的值的人.
id conditionA conditionB conditionC conditionD factor1 factor2
1 NA 1 NA NA 1 NA
2 1 NA NA NA 1 NA
3 NA NA 1 NA NA …
Run Code Online (Sandbox Code Playgroud) dummy-variable ×10
python ×6
pandas ×5
r ×4
scikit-learn ×3
data.table ×1
dataframe ×1
performance ×1
prediction ×1
regression ×1