簡體   English   中英

虹膜數據集上的多類分類

[英]Multiclass classification on iris dataset

我知道我要問一個問題很多問題,但這是我在對Iris Dataset使用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通過預測結果中的10起作用,但是對於此iris數據集,需要根據指定的分類將0 or 1 or 2分類。

問)是否需要使用StandardScalar標准化數據?

問)這是如何工作的? 我知道LR通過預測YESNO起作用,但是在這里( iris )我們必須預測012

問:如果LogisticRegression也適用於多種分類,那么如何優化我的上述代碼,以便在要嘗試的其他多類數據集上進行更好的預測。

問)我需要轉換y_train還是需要進行任何類型的編碼等才能使其正常工作?

如果有人能幫助我解決這些問題,我將不勝感激。 任何良好的參考,也表示贊賞。

我是否需要使用StandardScalar標准化數據

一般來說,這稱為Features Scaling ,簡而言之,有多個Scaler用於此目的:

  1. StandardScaler :通常是您的首選,它非常常用。 它通過對數據進行標准化即居中 )來進行工作,即使它們達到STD=1Mean=0 它會受到異常值的影響,僅當數據具有高斯樣分布時才應使用。
  2. MinMaxScaler :通常在要將所有數據點都置於特定范圍內( 例如[0-1] )時使用。 由於使用Range,它受到異常值的影響很大。
  3. RobustScaler :它對異常值具有魯棒性 ”,因為它根據分位數范圍縮放數據。 但是,您應該知道在縮放后的數據中仍將存在異常值。
  4. MaxAbsScaler :主要用於稀疏數據
  5. Unit Normalization :基本上,它將樣本的矢量縮放為具有單位范數,而與樣本的分布無關。

現在,根據經驗,我們通常會由於以下一個或多個原因縮放要素:

  1. 一些算法要求對特征進行縮放,例如神經網絡。 (例如避免消失梯度下降 ),另一個例子是當我們在SVM中使用RBF內核...等。
  2. Feature Scaling改善/加快收斂
  3. 當特征的大小,單位和范圍(例如5kg和5000gms)變化很大時,因為我們不希望算法錯誤地認為一個特征比另一個特征更重要(即對模型的影響更大)。

如您所見,要素縮放與Y 的類數無關。


..但是對於此虹膜數據集,則需要根據指定的分類將0或1或2進行分類...這是如何工作的? 我知道LR通過預測YES或NO起作用,但是在這里(iris)我們必須預測0或​​1或2

好吧,與二進制分類相反,這稱為多類分類

這里的基本思想是Scikit LogisticRegresser使用默認情況下的 One-vs-Rest(OvR)方案來解決它(又名One-vs-All),該方案可以這樣工作(用我能想到的最簡單的詞):

為每個類別i訓練一個邏輯回歸分類器,以預測y = i概率。 在新輸入x上進行預測,選擇具有最大似然性(即最高假設結果)的類i ,換句話說,它將多類分類問題簡化為多種二元分類問題 ,有關更多詳細信息,請參見此處


如果LogisticRegression也適用於多種分類,那么如何優化我的上述代碼,以便在要嘗試的其他多類數據集上進行更好的預測。

嗯,您不必進行任何優化,您可以抽象地使用Scikit庫,因此它將負責優化,並且確實是通過使用solver來實現的 ,以用於求解器之間的比較,請看這里 (我寫了它一次在Stackoverflow上)。


我需要轉換y_train還是需要進行任何類型的編碼等才能工作?

特別是對於您的情況(例如, 對於Iris Dataset ),答案是“ 否”,因為已經為您准備好了所有設置,但是如果因變量(即Y )中的值不是數字,則應將其轉換為數字,例如如果您有4個班級,則用數字表示每個班級(例如0、1、2、3)。 示例用單詞male和female替換0和1 )( 您應該做相反的事情,但是您從那里得到了這個主意:D )。


我會建議您從一個很好的參考開始,它會清除您所有的疑惑,都是吳德華教授的門課。

“我需要使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM