machine-learning - 具有非整数特征值的逻辑回归

标签 machine-learning regression linear-regression logistic-regression prediction

您好,我正在学习 Andrew Ng 的机器学习类(class)。 我发现在回归问题中,特别是逻辑回归,他们使用整数值来表示可以绘制在图表中的特征。但在很多用例中,特征值可能不是整数。

让我们考虑以下示例:

我想建立一个模型来预测任何特定的人今天是否会休假。从我的历史数据中,我可能会发现以下功能有助于构建训练集。

此人的姓名、星期几、到目前为止他剩余的假期数(可能是连续递减的变量)等。

因此,根据上述内容,提出以下问题

  1. 如何为我的逻辑回归模型设计训练集。

  2. 在我的训练集中,我发现一些变量不断减少(例如剩下的叶子数量)。这会产生任何问题吗,因为我知道线性回归中使用不断增加或减少的变量。这是真的吗?

非常感谢任何帮助。谢谢!

最佳答案

嗯,你的问题中有很多缺失的信息,例如,如果你提供了你拥有的所有功能,它会变得更加清晰,但让我敢于提出一些假设!


分类中的机器学习建模始终需要处理数字输入,并且您可以轻松地将每个唯一输入推断为整数,尤其是类别!


现在让我尝试回答您的问题:

  1. How do I go about designing the training set for my logistic regression model.

在我看来,你有两个选择(不一定都是实用的,你应该根据你拥有的数据集和问题来决定),或者你预测所有员工的概率在公司中,根据您拥有的历史数据(即之前的观察),谁将在某一天下类,在这种情况下,每个员工将代表一个类别(从 0 到您想要包括的员工数量的整数)。 或者您为每个员工创建一个模型,在这种情况下,类(class)将关闭(即休假)或打开(即当前)。

示例 1

我创建了一个包含 70 个案例和 4 名员工的数据集示例,如下所示:

dataset 1

这里每个名字都与他们休假的日期和月份相关联,以及他们还剩下多少年假!

实现(使用 Scikit-Learn )将是这样的(注意日期仅包含日期和月份):

现在我们可以做这样的事情:

import math
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, RepeatedStratifiedKFold

# read dataset example
df = pd.read_csv('leaves_dataset.csv')
# assign unique integer to every employee (i.e. a class label)
mapping = {'Jack': 0, 'Oliver': 1, 'Ruby': 2, 'Emily': 3}
df.replace(mapping, inplace=True)

y = np.array(df[['Name']]).reshape(-1)
X = np.array(df[['Leaves Left', 'Day', 'Month']])

# create the model
parameters = {'penalty': ['l1', 'l2'], 'C': [0.1, 0.5, 1.0, 10, 100, 1000]}
lr = LogisticRegression(random_state=0)
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=2, random_state=0)
clf = GridSearchCV(lr, parameters, cv=cv)
clf.fit(X, y)
#print(clf.best_estimator_)
#print(clf.best_score_)

# Example: probability of all employees who have 10 days left today
# warning: date must be same format
prob = clf.best_estimator_.predict_proba([[10, 9, 11]])
print({'Jack': prob[0,0], 'Oliver': prob[0,1], 'Ruby': prob[0,2], 'Emily': prob[0,3]})

结果

{'Ruby': 0.27545, 'Oliver': 0.15032, 
 'Emily': 0.28201, 'Jack': 0.29219}

注意 为了使这个相对工作,你需要一个真正的大数据集!

此外,如果数据集中还有其他信息丰富特征(例如当天员工的健康状况等),这也可能比第二个更好.


第二种选择是为每个员工创建一个模型,这样结果会更准确、更可靠,但是,如果你有太多员工,这几乎是一场噩梦!

对于每个员工,您收集他们过去几年的所有休假并将它们连接到一个文件中,在这种情况下,您必须完成一年中的所有日期,换句话说:对于该员工从未休假的每一天,这一天应标记为on(或数字上的 1),休息日应标记为off(或数字上的 0)。

显然,在这种情况下,每个员工模型的类别将为 01(即打开和关闭)!

例如,考虑特定员工 Jack 的数据集示例:

示例 2

dataset 2

然后你可以这样做:

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, RepeatedStratifiedKFold

# read dataset example
df = pd.read_csv('leaves_dataset2.csv')
# assign unique integer to every on and off (i.e. a class label)
mapping = {'off': 0, 'on': 1}
df.replace(mapping, inplace=True)

y = np.array(df[['Type']]).reshape(-1)
X = np.array(df[['Leaves Left', 'Day', 'Month']])

# create the model
parameters = {'penalty': ['l1', 'l2'], 'C': [0.1, 0.5, 1.0, 10, 100, 1000]}
lr = LogisticRegression(random_state=0)
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=2, random_state=0)
clf = GridSearchCV(lr, parameters, cv=cv)
clf.fit(X, y)
#print(clf.best_estimator_)
#print(clf.best_score_)


# Example: probability of the employee "Jack" who has 10 days left today
prob = clf.best_estimator_.predict_proba([[10, 9, 11]])
print({'Off': prob[0,0], 'On': prob[0,1]})

结果

{'On': 0.33348, 'Off': 0.66651}

注意在这种情况下,您必须为每个员工创建一个数据集+培训特殊模型+将过去几年中从未休假的所有天数填充为休息!


  1. In my training set, I find some variables are continuously decreasing (ex no of leaves left). Would that create any problem, because I know continuously increasing or decreasing variables are used in linear regression. Is that true ?

好吧,没有什么可以阻止您在逻辑回归中使用有争议的值作为特征(例如叶子数);实际上,如果它用于线性或逻辑回归,则没有任何区别,但我相信您对特征响应感到困惑:

问题是,逻辑回归的响应中应使用离散值,而响应中应使用连续值> 线性回归(又名因变量或 y)。

关于machine-learning - 具有非整数特征值的逻辑回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223252/

相关文章:

python - 训练 RNN 以输出 word2vec 嵌入而不是 logits

r - 如何重复单变量回归并提取P值?

r - 在 Rcpp RcppEigen 中乘以 ols 回归中的对角线

python - LinearRegression() 和 Ridge(alpha=0) 的区别

plot - 添加回归方程和 R2 以在 Julia 中绘图

R:auto.arima() 与 xreg 与 lm()

javascript - 过度拟合神经网络的最佳方法是什么?

python - 为什么我无法使用随机森林找到最低平均绝对误差?

python - 小批量梯度下降、adam 和纪元

python - 如何使用 Keras GRU 在多参数天气时间序列上实际预测一个参数