Machine learning 非整特征值Logistic回归 嗨,我在跟随Andrew Ng的机器学习课程。 我发现在回归问题中,特别是逻辑回归中,他们使用整数值作为特征,这些特征可以绘制在图表中。但是,在很多用例中,特征值可能不是整数 让我们考虑下面的例子:
我想建立一个模型来预测今天是否有人会休假。从我的历史数据中,我可能会发现以下特性有助于构建培训集 此人姓名、一周中的哪一天、到目前为止留给他的假期数(这可能是一个连续递减的变量)等 因此,以下是基于上述原因提出的问题Machine learning 非整特征值Logistic回归 嗨,我在跟随Andrew Ng的机器学习课程。 我发现在回归问题中,特别是逻辑回归中,他们使用整数值作为特征,这些特征可以绘制在图表中。但是,在很多用例中,特征值可能不是整数 让我们考虑下面的例子:,machine-learning,regression,linear-regression,logistic-regression,prediction,Machine Learning,Regression,Linear Regression,Logistic Regression,Prediction,我想建立一个模型来预测今天是否有人会休假。从我的历史数据中,我可能会发现以下特性有助于构建培训集 此人姓名、一周中的哪一天、到目前为止留给他的假期数(这可能是一个连续递减的变量)等 因此,以下是基于上述原因提出的问题 我如何为我的逻辑回归模型设计训练集 在我的训练集中,我发现一些变量在不断减少(例如,剩下的叶子数量)。这会不会产生任何问题,因为我知道线性回归中会使用不断增加或减少的变量。这是真的吗 非常感谢您的帮助。谢谢 好吧,你的问题中有很多遗漏的信息,例如,如果你提供了你所有的功能,它会更加
非常感谢您的帮助。谢谢 好吧,你的问题中有很多遗漏的信息,例如,如果你提供了你所有的功能,它会更加清晰,但是让我大胆地提出一些假设
分类中的ML建模总是需要处理数字输入,并且您可以轻松地将每个唯一输入推断为整数,尤其是类
现在让我试着回答你们的问题:
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]})
在这里,每个名字都与他们休假的日期和月份有关,与他们每年剩下的假期数量有关
实现(使用)如下所示(注意日期仅包含日和月):
现在我们可以这样做:
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': 0.33348, 'Off': 0.66651}
N.B
要使其相对有效,您需要一个真正的大数据集
此外,如果数据集中有其他信息性特征(例如员工当天的健康状况等),则这可能比第二个更好
第二个选择是为每个员工创建一个模型,这里的结果会更准确、更可靠,但是,如果你有太多的员工,这几乎是一场噩梦 对于每个员工,您收集他们过去几年的所有假期并将其连接到一个文件中,在这种情况下,您必须完成一年中的所有天数,换句话说:对于员工从未休过假的每一天,该天都应在上标记为(或数字表示为1)在休息日,他们应该被标记为off(或者数字上说是0) 显然,在这种情况下,对于每个员工的模型,类将是0和1(即打开和关闭)
例如,考虑此数据集的示例针对特定雇员<强>杰克< /强>:
例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]})
结果
{'Ruby': 0.27545, 'Oliver': 0.15032,
'Emily': 0.28201, 'Jack': 0.29219}
{'On': 0.33348, 'Off': 0.66651}
N.B在这种情况下,您必须为每位员工创建一个数据集+培训特别模式+将过去几年中从未休过的所有日子都填上
问题是,离散值应用于逻辑回归的响应,连续值应用于线性回归的响应(也称为因变量或
y
).我认为这更像是数据科学堆栈交换的一个问题,因为您不需要代码方面的帮助。好的,我会把它贴在那里。我得到了您的答案。对于这个用例,我可能选择了一个错误的特性名称。让我这样重新表述我的问题——假设一个模型想要预测一个人的性别。选择的特征是姓名和国家(有时同一姓名在不同的国家有不同的性别)。那么一个训练集(其中y(i)={0,1}和X(i)={somename,somecountry},对于第i个训练集),我如何绘制图形以便可视化决策边界?对于最初的问题,我想预测给定的名字X(1),离开X(2),第X(3)天,我的人离开的概率是多少。但是我知道在这种情况下,名称X(1)应该是类本身,或者我为每个名称构建了一个模型。谢谢你的帮助。我读过一篇关于热编码的文章,这也是解决上述问题的方法之一。