虹膜数据集上的多类分类

时间:2018-10-01 08:55:55

标签: python machine-learning scikit-learn

我知道我要问一个问题很多,但这是我在将Logistic Regression用于Iris Dataset时遇到的疑问

这是我在LogisticRegression数据集上使用iris的代码。

iris = datasets.load_iris()
X, y = iris.data, iris.target
x_train, x_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state= 81,
                                                           test_size=0.3)
logreg = LogisticRegression()
logreg.fit(x_train, y_train)
pred = logreg.predict(x_test)
accuracy_score(y_test, pred) # this gives accuracy
0.95555

我知道LogisticRegression通过预测结果中的10来工作,但是对于此iris数据集,将需要根据指定的数据对0 or 1 or 2进行分类。

Q)我需要使用StandardScalar标准化数据吗?

问:如何运作?我知道LR通过预测YESNO起作用,但是在这里(iris)我们必须预测01或{{1} }

Q)如果2也适用于多种分类,那么我该如何优化我的上述代码,以更好地预测要尝试的其他多类数据集。

Q)我需要转换我的LogisticRegression还是需要进行任何类型的编码等才能使其正常工作?

如果有人能帮助我解决这些问题,我将不胜感激。任何好的参考文献也将受到赞赏。

2 个答案:

答案 0 :(得分:4)

  

我是否需要使用StandardScalar标准化数据

通常来说,这称为Features Scaling,并且简而言之,有多个 Scaler

  1. StandardScaler:通常是您的首选,它非常常用。它通过标准化数据(即将它们居中)来工作,即将它们带到STD=1Mean=0。它会受到异常值的影响,并且仅当您的数据具有Gaussian-Like Distribution时才应使用。
  2. MinMaxScaler:通常在您要将所有数据点都放入特定范围内时使用(例如[0-1] )。仅仅因为它使用Range,它就受到异常值的严重影响。
  3. RobustScaler:针对异常值是“ robust ”,因为它根据quantile range缩放数据。但是,您应该知道,缩放后的数据中仍会存在异常值。
  4. MaxAbsScaler:主要用于sparse data
  5. Unit Normalization:基本上,它会将每个样本的矢量缩放为具有单位范数,而与样本的分布无关。

现在,根据经验,我们通常会 缩放要素,原因如下(一个或多个):

  1. 某些算法要求对功能进行缩放,例如神经网络。 (例如,避免使用Vanishing Gradient Descent),另一个例子是当我们在SVM等中使用RBF内核时。
  2. 功能扩展可改善/加快convergence
  3. 当特征的大小,单位和范围(例如5kg和5000gms)变化很大时,因为我们不希望算法错误地认为一个特征更重要(即对特征的影响更大)该模型)。

如您所见,要素缩放与Y中的类数无关。


  

..但是对于此虹膜数据集,需要基于0或1或2分类   在指定的...这是如何工作的?我知道LR通过预测YES或NO起作用   但是在这里(虹膜)我们必须预测0或​​1或2

Binary Classification相比,这叫做Multiclass Classification

这里的基本思想是Scikit LogisticRegresser使用 One-vs-Rest(OvR)方案-默认为 -解决此问题(又称One-vs-全部)的工作方式(用我能想到的最简单的词)是这样的:

为每个类别i训练逻辑回归分类器,以预测y = i的概率。在新输入x上进行预测,选择具有最大似然性(即最高假设结果)的类i,换句话说,它将多类分类的问题减少到m 多种二进制分类问题,有关更多详细信息,请查看here


  

如果LogisticRegression也适用于多种分类,则   我如何优化我的上述代码以更好地预测其他代码   我想尝试的多类数据集。

好吧,您不必进行任何优化,您可以抽象地使用Scikit库,因此它将负责优化,而实际上是通过使用 solver 实现的。 em> ,为比较求解器,请查看here(我在Stackoverflow上写过一次)。


  

我需要转换y_train还是需要做任何类型的   编码等才能正常工作?

对于您的特定情况(例如,对于Iris数据集来说是 ),答案是,因为已经为您准备好了,但是如果因变量中的值(即Y不是数字,则应将它们转换为数字,例如,如果您有4个类别,则用数字表示每个类别(例如0、1、2、3)。 (example of replacing the 0's and 1's by the words male and female)(您应该做相反的事情,但是您从那里得到了这个主意:D )。


我建议您从此开始做一个非常好的参考,它会清除您所有的疑问,都是吴安德教授的this课程。

答案 1 :(得分:1)

“我需要使用StandardScalar标准化数据吗?”

达到标准化数据集的目的是为了使模型收敛更快,因为认为此问题相对简单,因此不需要标准化,无论如何都可以

“这是如何工作的?我知道LR通过预测是或否来工作,但是在这里(虹膜),我们必须预测0或​​1或2”

基本上,对于多类回归,会创建多个模型,在这种情况下,将创建3个模型,每个模型将为每个类预测YES或NO,因此,基本上,您将测试所有类的测试时间数据集,并且具有最高可能性的类是然后返回给您

“我需要转换y_train还是进行任何类型的编码等才能使其正常工作?”

不,您可以按原样传递y_train数据

“当我们将多个分类与LogisticRegression一起使用时,要使用的所有评分参数。这些评分参数与单类分类(o或1)有何不同?”

我确实没有收到这个问题,但是您应该创建一个逻辑回归模型,如下所示: logreg = LogisticRegression(C=1e5, solver='lbfgs', multi_class='multinomial')

您可以在http://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html

中找到确切的应用示例。