我知道我用一个问题问了很多问题,但这些是我在对 Iris 数据集使用 Logistic Regression 时遇到的疑问
这是我在 iris 数据集上使用 LogisticRegression 的代码。
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 或 1 或 2 根据指定。
问)我是否需要使用 StandardScalar 对数据进行标准化?
问)这是如何运作的?我知道 LR 通过预测 YES 或 NO 来工作,但在这里 (iris) 我们必须预测 0 或 1 或 2
Q) 如果 LogisticRegression 也适用于多分类,那么我如何优化我的上述代码以便更好地预测我想尝试的其他多类数据集。
问)我需要转换我的 y_train 还是需要进行任何类型的编码等才能让它工作?
如果有人能帮我解决这些问题,我将不胜感激。也欢迎任何好的引用。
请您参考如下方法:
Do I need to Standardize the data using StandardScalar
一般来说,这个叫做Features Scaling ,并且有不止一个 Scaler 用于此目的,简而言之:
-
StandardScaler: 通常是你的第一选择,它很常用。它通过对数据进行标准化(即使它们居中)来工作,从而使它们达到STD=1和Mean=0。它会受到异常值的影响,只有当您的数据有 Gaussian-Like Distribution 时才应使用它。 . -
MinMaxScaler: 通常在您想要将所有数据点置于特定范围内时使用(例如 [0-1])。它受到异常值的严重影响仅仅是因为它使用了 Range . -
RobustScaler:它对异常值“稳健”,因为它根据 quantile range 缩放数据。 .但是,您应该知道,缩放后的数据中仍然会存在异常值。 -
MaxAbsScaler: 主要用于 sparse data . -
Unit Normalization: 基本上它缩放每个样本的向量以具有单位范数,独立于样本的分布。
根据经验,我们通常会因为以下一个(或多个)原因缩放特征:
- 一些算法需要缩放特征,例如神经网络。 (为了避免例如 Vanishing Gradient Descent ),另一个例子是当我们在 SVM 中使用
RBF内核时......等等。 - 特征缩放改进/加速 convergence .
- 当特征在大小、单位和范围(例如 5 千克和 5000 克)上差异很大时,因为我们不希望算法错误地认为一个特征更重要(即对其他特征有更大的影响)模型)比另一个。
如您所见,特征缩放与您在 Y 中拥有的类数无关。
..but for this iris dataset will need to classifiy 0 or 1 or 2 based on specified...How this works? I know LR works by prediction YES OR NO but here(iris) we have to predict 0 or 1 or 2
嗯,对比 Binary Classification , 这叫做 Multiclass Classification .
这里的基本思想是Scikit LogisticRegresser使用 One-vs-Rest (OvR) 方案 -默认- 来解决它(又名 One-vs-All),它有效(用我能想到的最简单的词) )像这样:
为每个类 i 训练逻辑回归分类器以预测 y = i 的概率。在新的输入 x 上,为了进行预测,选择具有最大似然(即最高假设结果)的类 i,换句话说,它减少了问题多类分类到 m多个二元分类问题,有关更多详细信息,请查看 here .
If
LogisticRegressionalso works for multiple classification then how can I optimize my above code for better prediction on other multiclass datasets I want to try.
好吧,您不必进行任何优化,您是在抽象地使用 Scikit 库,因此它会负责优化,实际上它是通过使用求解器,解算器之间的比较,看here (我在 Stackoverflow 上写过一次)。
Do I need to convert my y_train or do I need to do any type of encoding etc for it to work?
特别是对于您的情况(即 Iris 数据集),答案是否,因为它已经为您准备好了,但是如果因变量中的值 (即 Y) 不是数字,那么您应该将它们转换为数字,例如,如果您有 4 个类,则每个类都用一个数字表示(例如 0、1、2、3)。 ( example of replacing the 0's and 1's by the words male and female )(你应该做相反的事情,但你从那里得到了想法 :D)。
我建议您从一个非常好的引用开始,它会消除您所有的疑虑是 this Andrew NG教授的类(class)。
