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建模总是需要处理数字输入,并且您可以轻松地将每个唯一输入推断为整数,尤其是类


    现在让我试着回答你们的问题:

  • 我如何为我的逻辑回归模型设计训练集
  • 在我看来,你有两个选择(不一定都是可行的,应该由你根据你拥有的数据集和问题来决定),或者根据你拥有的历史数据(即之前的观察结果)预测公司所有员工在某一天休假的概率,每个员工将代表一个类(从0到要包含的员工数的整数)为每位员工创建一个模型,在这种情况下,课程将关闭(即休假)或打开(即出席)

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

    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)

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

    例如,考虑此数据集的示例针对特定雇员<强>杰克< /强>:

    例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)应该是类本身,或者我为每个名称构建了一个模型。谢谢你的帮助。我读过一篇关于热编码的文章,这也是解决上述问题的方法之一。