Wenn Sie den OneHotEncoder von scikit-learn unverändert verwenden, werden Dummy-Variablen für die Anzahl der Ebenen kategorialer Variablen erstellt. In diesem Fall tritt bei der linearen Regressionsmethode eine multiple Co-Linearität auf, daher möchten wir die Dummy-Variable auf die Anzahl der Ebenen -1 reduzieren. Ich habe herausgefunden, wie es geht, also notiere es dir.
Wenn Sie die Drop-Option von OneHotEncoder auf "first" setzen, wird die erste Dummy-Variable entfernt.
Hier extrahieren wir die Spalte, in der die folgenden kategorialen Variablen gespeichert sind, und machen sie zu kategorialen Variablen.
[['D']
['D']
['D']
['T']
['T']
['T']
['N']
['N']
['N']]
Die Quelle ist wie folgt. Wenn Sie die Drop-Option auf "first" setzen, werden Sie wütend, wenn Sie handle_unknown = 'error' nicht setzen.
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder
import numpy as np
def main():
X = np.array([
[1, "D"],
[3, "D"],
[5, "D"],
[2, "T"],
[4, "T"],
[6, "T"],
[1, "N"],
[8, "N"],
[2, "N"],
])
y = np.array([2, 6, 10, 6, 12, 18, 1, 8, 2])
#Nehmen Sie die zweite Reihe heraus
category = X[:, [1]]
print(category)
encoder = OneHotEncoder(handle_unknown='error', drop='first')
encoder.fit(category)
result = encoder.transform(category)
print(result.toarray())
if __name__ == "__main__":
main()
Wenn drop = 'first' nicht hinzugefügt wird.
[[1. 0. 0.]
[1. 0. 0.]
[1. 0. 0.]
[0. 0. 1.]
[0. 0. 1.]
[0. 0. 1.]
[0. 1. 0.]
[0. 1. 0.]
[0. 1. 0.]]
Wenn drop = 'Faust' hinzugefügt wird
[[0. 0.]
[0. 0.]
[0. 0.]
[0. 1.]
[0. 1.]
[0. 1.]
[1. 0.]
[1. 0.]
[1. 0.]]
Sicher ist die erste Spalte weg. Jetzt können Sie die Fit-Methode ohne zu zögern aufrufen.