具有非整数特征值的逻辑回归
Logistic Regression with Non-Integer feature value
您好,我正在学习 Andrew Ng 的机器学习课程。
我发现在回归问题中,特别是逻辑回归,他们使用整数值来表示可以绘制在图表中的特征。但是有很多用例,其中特征值可能不是整数。
让我们考虑以下示例:
我想建立一个模型来预测某个人今天是否会请假。根据我的历史数据,我可能会发现以下功能有助于构建训练集。
此人的姓名、星期几、到目前为止留给他的叶子数(这可能是一个连续递减的变量)等
所以下面是基于以上的问题
如何为逻辑回归模型设计训练集。
在我的训练集中,我发现一些变量在不断减少(例如剩下的叶子数)。这会产生任何问题吗,因为我知道线性回归中使用了不断增加或减少的变量。是真的吗?
非常感谢您的帮助。谢谢!
好吧,你的问题中有很多缺失的信息,例如,如果你提供了你拥有的所有功能,它会更清楚,但让我敢于抛出一些假设!
classification 中的 ML 建模始终需要处理数字输入,您可以轻松地将每个唯一输入推断为整数,尤其是 classes!
现在让我试着回答你的问题:
- How do I go about designing the training set for my logistic regression model.
我怎么看,你有两个选择(不一定都是实用的,你应该根据你的数据集和问题来决定),或者你预测根据你掌握的历史数据(即之前的观察),公司所有员工在某一天下班的概率,在这种情况下,每个员工将代表一个class(整数从 0 到您要包括的员工人数)。 或您为每个员工创建一个模型,在这种情况下,classes 将关闭(即离开)或打开(即在场)。
示例 1
我创建了一个包含 70 个案例和 4 名员工的数据集示例,如下所示:
在这里,每个名字都与他们休假的日期和月份相关联,这取决于他们还剩下多少年假!
实现(使用Scikit-Learn)会是这样的(N.B date contains only day and month):
现在我们可以这样做:
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}
N.B
要使这个相对工作,你需要一个真正的大数据集!
此外,如果数据集中还有其他信息特征(例如那天的员工..等)。
第二个选项是为每个员工创建一个模型,这里的结果会更准确,更可靠,但是,如果员工太多,这几乎是一场噩梦!
对于每个员工,您收集他们过去几年的所有休假并将它们连接到一个文件中,在这种情况下您必须完成一年中的所有天数,换句话说:对于该员工从未有过的每一天关闭,那一天应该标记为 on(或者从数字上讲是 1),对于休息日,它们应该标记为 off(或者从数字上讲是 0)。
显然,在这种情况下,classes 将为 0 和 1(即打开和关闭)每个员工的模型!
例如,考虑特定员工的这个数据集示例 Jack:
示例 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}
N.B 在这种情况下,您必须为每个员工创建一个数据集 + 培训特殊模型 + 填写过去几年从未休假的所有日子!
- 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 ?
好吧,没有什么可以阻止您在逻辑回归中使用有争议的值作为特征(例如叶数);实际上,如果它用于线性或逻辑回归,它没有任何区别,但我相信你在 features 和 response 之间感到困惑:
事实是,在逻辑回归的响应中应该使用离散值,在线性回归的响应(a.k.a因变量或y
)。
您好,我正在学习 Andrew Ng 的机器学习课程。 我发现在回归问题中,特别是逻辑回归,他们使用整数值来表示可以绘制在图表中的特征。但是有很多用例,其中特征值可能不是整数。
让我们考虑以下示例:
我想建立一个模型来预测某个人今天是否会请假。根据我的历史数据,我可能会发现以下功能有助于构建训练集。
此人的姓名、星期几、到目前为止留给他的叶子数(这可能是一个连续递减的变量)等
所以下面是基于以上的问题
如何为逻辑回归模型设计训练集。
在我的训练集中,我发现一些变量在不断减少(例如剩下的叶子数)。这会产生任何问题吗,因为我知道线性回归中使用了不断增加或减少的变量。是真的吗?
非常感谢您的帮助。谢谢!
好吧,你的问题中有很多缺失的信息,例如,如果你提供了你拥有的所有功能,它会更清楚,但让我敢于抛出一些假设!
classification 中的 ML 建模始终需要处理数字输入,您可以轻松地将每个唯一输入推断为整数,尤其是 classes!
现在让我试着回答你的问题:
- How do I go about designing the training set for my logistic regression model.
我怎么看,你有两个选择(不一定都是实用的,你应该根据你的数据集和问题来决定),或者你预测根据你掌握的历史数据(即之前的观察),公司所有员工在某一天下班的概率,在这种情况下,每个员工将代表一个class(整数从 0 到您要包括的员工人数)。 或您为每个员工创建一个模型,在这种情况下,classes 将关闭(即离开)或打开(即在场)。
示例 1
我创建了一个包含 70 个案例和 4 名员工的数据集示例,如下所示:
在这里,每个名字都与他们休假的日期和月份相关联,这取决于他们还剩下多少年假!
实现(使用Scikit-Learn)会是这样的(N.B date contains only day and month):
现在我们可以这样做:
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}
N.B 要使这个相对工作,你需要一个真正的大数据集!
此外,如果数据集中还有其他信息特征(例如那天的员工..等)。
第二个选项是为每个员工创建一个模型,这里的结果会更准确,更可靠,但是,如果员工太多,这几乎是一场噩梦!
对于每个员工,您收集他们过去几年的所有休假并将它们连接到一个文件中,在这种情况下您必须完成一年中的所有天数,换句话说:对于该员工从未有过的每一天关闭,那一天应该标记为 on(或者从数字上讲是 1),对于休息日,它们应该标记为 off(或者从数字上讲是 0)。
显然,在这种情况下,classes 将为 0 和 1(即打开和关闭)每个员工的模型!
例如,考虑特定员工的这个数据集示例 Jack:
示例 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}
N.B 在这种情况下,您必须为每个员工创建一个数据集 + 培训特殊模型 + 填写过去几年从未休假的所有日子!
- 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 ?
好吧,没有什么可以阻止您在逻辑回归中使用有争议的值作为特征(例如叶数);实际上,如果它用于线性或逻辑回归,它没有任何区别,但我相信你在 features 和 response 之间感到困惑:
事实是,在逻辑回归的响应中应该使用离散值,在线性回归的响应(a.k.a因变量或y
)。