离散变量处理

1、one-hot encoding

  假如多个特征需要独热码编码,那么久按照上面的方法依次将每个特征的独热码拼接起来:

    {sex:{male, female,other}}

    {grade:{一年级, 二年级,三年级, 四年级}}

  此时对于输入为{sex:male; grade: 四年级}进行独热编码,可以首先将sex按照上面的进行编码得到{100},然后按照grade进行编码为{0001},那么两者连接起来得到最后的独热码{1000001};

from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
enc.transform([[0, 1, 3]]).toarray()
one_hot encoding

2、 dummy coding

dummy encoding就是把一个有h个level的变量变成h-1个变量,比如3个level的变量就表示成成10,01,或00。而one-hot encoding就是用h个变量来代表这h个level,比如3个level的变量就表示成100,010,001

download.file("http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data", 
    "./german.data")
data <- read.table("./german.data")
str(data)

library("neuralnet")
NNModelAllNum <- neuralnet(V21 ~ V2 + V5 + V8, data)
NNModelAllNum
NNModel <- neuralnet(V21 ~ V1 + V2 + V5 + V8, data)
## Error: 需要数值/复数矩阵/矢量参数

dummyV1 <- model.matrix(~V1, data)
head(cbind(dummyV1, data$V1))


##   (Intercept) V1A12 V1A13 V1A14  
## 1           1     0     0     0 1
## 2           1     1     0     0 2
## 3           1     0     0     1 4
## 4           1     0     0     0 1
## 5           1     0     0     0 1
## 6           1     0     0     1 4

modelData <- model.matrix(~V1 + V2 + V5 + V8 + V21, data)
head(modelData)

##   (Intercept) V1A12 V1A13 V1A14 V2   V5 V8 V21
## 1           1     0     0     0  6 1169  4   1
## 2           1     1     0     0 48 5951  2   2
## 3           1     0     0     1 12 2096  2   1
## 4           1     0     0     0 42 7882  2   1
## 5           1     0     0     0 24 4870  3   2
## 6           1     0     0     1 36 9055  2   1

NNModel <- neuralnet(V21 ~ V1A12 + V1A13 + V1A14 + V2 + V5 + V8, modelData)

3、 woe(weight of evidence)

WOEi=ln(PyiPni)=ln(#yi/#yT#ni/#nT)=ln(#yi/#ni#yT/#nT)

  • Pyi 是这个组中响应客户(风险模型中,对应的是违约客户,总之,指的是模型中预测变量取值为“是”或者说1的个体)占所有样本中所有响应客户的比例,
  • Pni 是这个组中未响应客户占样本中所有未响应客户的比例,
  • #yi 是这个组中响应客户的数量, #ni 是这个组中未响应客户的数量,
  • #yT 是样本中所有响应客户的数量, #nT 是样本中所有未响应客户的数量
    • 当前分组中,响应的比例越大,WOE值越大;
    • 当前分组WOE的正负,由当前分组响应和未响应的比例,与样本整体响应和未响应的比例的大小关系决定,当前分组的比例小于样本整体比例时,WOE为负,当前分组的比例大于整体比例时,WOE为正,当前分组的比例和整体比例相等时,WOE为0。
    • WOE的取值范围是全体实数。

4、iv (information value)

IVi=(PyiPni)×WOEi

IV=i=1nIVi

  • 对于变量的一个分组,这个分组的响应和未响应的比例与样本整体响应和未响应的比例相差越大,IV值越大,否则,IV值越小;
  • 极端情况下,当前分组的响应和未响应的比例和样本整体的响应和未响应的比例相等时,IV值为0;
  • IV值的取值范围是[0,+∞),且,当当前分组中只包含响应客户或者未响应客户时,IV = +∞。
  • n为特征包含的水平数目

http://www.cnblogs.com/daguankele/p/6595470.html

http://iccm.cc/generate-dummy-variable-in-r-language/

https://www.zhihu.com/question/48674426?sort=created

http://blog.youkuaiyun.com/kevin7658/article/details/50780391

### 离散变量作为因变量的回归分析方法 在回归分析中,当因变量(即被解释变量)为离散变量时,传统的线性回归不再适用。这是因为线性回归假设因变量是连续的,并且服从正态分布。对于离散型因变量,通常使用**分类模型**进行建模。以下是几种常见的处理方法: #### 1. **Logistic 回归** Logistic 回归是最常用的处理二元分类问题的方法。它通过将线性回归的输出映射到 [0, 1] 区间来预测概率,使用的链接函数是 logit 函数: $$ \text{logit}(p) = \ln\left(\frac{p}{1-p}\right) $$ 其中 $ p $ 是事件发生的概率。这种方法适用于因变量只有两个类别的场景,例如“是否购买产品”或“是否通过考试”[^2]。 #### 2. **多元 Logistic 回归** 当因变量具有多于两个类别时,可以使用多元 Logistic 回归(也称为多项 Logit 模型)。该方法扩展了二元 Logistic 回归,能够处理多个类别的情况。例如,在研究消费者选择不同品牌的产品时,因变量可能是“品牌A”、“品牌B”、“品牌C”等。 #### 3. **有序 Logistic 回归** 如果因变量的类别之间存在顺序关系,例如教育水平(“高中”、“本科”、“硕士”、“博士”),则可以使用有序 Logistic 回归。这种模型考虑了类别之间的等级关系,从而提供更准确的预测结果[^2]。 #### 4. **泊松回归** 当因变量表示某种计数数据(如事件发生的次数)并且符合泊松分布时,可以使用泊松回归。例如,研究每天网站访问量、每月交通事故数量等场景。泊松回归假设因变量的均值和方差相等,这在某些情况下可能不成立,此时可以考虑负二项回归作为替代方案[^2]。 #### 5. **广义线性模型 (GLM)** 广义线性模型 (Generalized Linear Model, GLM) 是一种更为通用的框架,涵盖了线性回归、Logistic 回归和泊松回归等多种回归方法。GLM 允许因变量服从指数族分布,并通过链接函数将线性预测值与实际响应变量联系起来。例如,在 R 语言中,可以通过 `glm()` 函数指定不同的家族(如 `binomial` 和 `poisson`)来实现这些模型[^3]。 #### 6. **随机森林和梯度提升树** 除了传统的统计模型外,机器学习方法也可以用于处理离散变量的问题。例如,随机森林和梯度提升树(如 XGBoost、LightGBM)能够自动处理分类变量,并捕捉复杂的非线性关系。这些方法在高维数据和大规模数据集上表现优异,但其可解释性较差。 #### 7. **编码分类变量** 在使用上述模型之前,通常需要对分类变量进行编码。常见的编码方法包括: - **独热编码 (One-Hot Encoding)**:将每个类别转换为一个新的二进制特征。 - **目标编码 (Target Encoding)**:用每个类别的目标变量的均值代替原始类别值。 - **标签编码 (Label Encoding)**:将类别映射为整数形式。例如,将 "High School" 映射为 1,"Bachelor's Degree" 映射为 6 等[^4]。 #### 8. **R 语言中的实现示例** 在 R 语言中,可以通过以下代码实现逻辑回归: ```r # 加载数据 dat <- mtcars # 执行逻辑回归 logr_vm <- glm(vs ~ mpg, data = dat, family = binomial) # 查看模型汇总信息 summary(logr_vm) ``` 在这个例子中,`vs` 是离散响应变量,而 `mpg` 是连续预测变量。`family = binomial` 指定了使用二项分布的 Logistic 回归模型[^3]。 #### 9. **Python 中的实现示例** 在 Python 中,可以通过 `sklearn` 或 `statsmodels` 库实现 Logistic 回归。例如: ```python from sklearn.linear_model import LogisticRegression import pandas as pd # 假设 df 是一个包含数据的 DataFrame X = df[['mpg']] y = df['vs'] # 创建并拟合模型 model = LogisticRegression() model.fit(X, y) # 输出模型系数 print("Coefficients:", model.coef_) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值