[英]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通過預測結果中的1
或0
起作用,但是對於此iris
數據集,需要根據指定的分類將0 or 1 or 2
分類。
問)是否需要使用StandardScalar標准化數據?
問)這是如何工作的? 我知道LR
通過預測YES
或NO
起作用,但是在這里( iris
)我們必須預測0
或1
或2
問:如果LogisticRegression
也適用於多種分類,那么如何優化我的上述代碼,以便在要嘗試的其他多類數據集上進行更好的預測。
問)我需要轉換y_train
還是需要進行任何類型的編碼等才能使其正常工作?
如果有人能幫助我解決這些問題,我將不勝感激。 任何良好的參考,也表示贊賞。
我是否需要使用StandardScalar標准化數據
一般來說,這稱為Features Scaling ,簡而言之,有多個Scaler用於此目的:
StandardScaler
:通常是您的首選,它非常常用。 它通過對數據進行標准化 ( 即居中 )來進行工作,即使它們達到STD=1
和Mean=0
。 它會受到異常值的影響,僅當數據具有高斯樣分布時才應使用。 MinMaxScaler
:通常在要將所有數據點都置於特定范圍內( 例如[0-1] )時使用。 由於使用Range,它受到異常值的影響很大。 RobustScaler
:它對異常值具有 “ 魯棒性 ”,因為它根據分位數范圍縮放數據。 但是,您應該知道在縮放后的數據中仍將存在異常值。 MaxAbsScaler
:主要用於稀疏數據 。 Unit Normalization
:基本上,它將樣本的矢量縮放為具有單位范數,而與樣本的分布無關。 現在,根據經驗,我們通常會由於以下一個或多個原因來縮放要素:
RBF
內核...等。 如您所見,要素縮放與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.