我知道我要问一个问题很多,但这是我在将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通过预测结果中的1
或0
来工作,但是对于此iris
数据集,将需要根据指定的数据对0 or 1 or 2
进行分类。
Q)我需要使用StandardScalar标准化数据吗?
问:如何运作?我知道LR
通过预测YES
或NO
起作用,但是在这里(iris
)我们必须预测0
或1
或{{1} }
Q)如果2
也适用于多种分类,那么我该如何优化我的上述代码,以更好地预测要尝试的其他多类数据集。
Q)我需要转换我的LogisticRegression
还是需要进行任何类型的编码等才能使其正常工作?
如果有人能帮助我解决这些问题,我将不胜感激。任何好的参考文献也将受到赞赏。
答案 0 :(得分:4)
我是否需要使用StandardScalar标准化数据
通常来说,这称为Features Scaling,并且简而言之,有多个 Scaler :
StandardScaler
:通常是您的首选,它非常常用。它通过标准化数据(即将它们居中)来工作,即将它们带到STD=1
和Mean=0
。它会受到异常值的影响,并且仅当您的数据具有Gaussian-Like Distribution时才应使用。MinMaxScaler
:通常在您要将所有数据点都放入特定范围内时使用(例如[0-1] )。仅仅因为它使用Range,它就受到异常值的严重影响。RobustScaler
:针对异常值是“ robust ”,因为它根据quantile range缩放数据。但是,您应该知道,缩放后的数据中仍会存在异常值。MaxAbsScaler
:主要用于sparse data。Unit Normalization
:基本上,它会将每个样本的矢量缩放为具有单位范数,而与样本的分布无关。现在,根据经验,我们通常会 缩放要素,原因如下(一个或多个):
RBF
内核时。如您所见,要素缩放与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
中找到确切的应用示例。