Kaggle hat ein einleitendes datenwissenschaftliches Problem auf der Titanic, wo das Ziel ist, die Überlebenschancen eines Passagiers vorherzusagen, einige Informationen über ihn/sie gegeben Geschlecht, Alter, Kabinenklasse usw.). Ich habe dazu ein einfaches logistisches Regressionsmodell in Python mit Scikit Learn implementiert, und ich untersuchte gerade das Hinzufügen von Faktoren mit höherem Grad der Variable "Age". Ich benutzte PolynomialFeatures gemäß den Anweisungen auf Website Scikit Learn:Schwierigkeiten, PolynomialFeatures zu erhalten, während ein logistisches Modell in Scikit passt Learn
import pandas as pd
from sklearn import linear_model
import numpy as np
from sklearn import preprocessing
from sklearn.preprocessing import PolynomialFeatures
# Import titanic data
titanic = pd.read_csv("train.csv")
# Set the training set as 70% of the dataset and cross_validation set as remaining 30%
predictors = ["Age"]
training_set = titanic[predictors].iloc[range(0,int(titanic.shape[0]*0.7)),:]
cv_set = titanic[predictors].iloc[range(int(titanic.shape[0]*0.7),titanic.shape[0]),:]
training_actuals = titanic["Survived"].iloc[range(0,int(titanic.shape[0]*0.7))]
cv_actuals = titanic["Survived"].iloc[range(int(titanic.shape[0]*0.7),titanic.shape[0])]
# Create polynomial features
poly = PolynomialFeatures(degree=3)
training_set = poly.fit_transform(training_set)
cv_set = poly.fit_transform(cv_set)
# Fit a logistic regression model, predict values for training and cross-validation sets
alg = linear_model.LogisticRegression()
alg.fit(training_set, training_actuals)
cv_predictions = alg.predict(cv_set)
training_predictions = alg.predict(training_set)
# Measure and print accuracy of prediction over both training and cross-validation sets
cv_accuracy = len(cv_predictions[cv_predictions == np.array(cv_actuals)])/float(len(cv_predictions))
print "Prediction accuracy on cross-validation set is %s%%" % (cv_accuracy * 100)
training_accuracy = len(training_predictions[training_predictions == np.array(training_actuals)])/float(len(training_predictions))
print "Prediction accuracy on training set is %s%%" % (training_accuracy * 100)
Meine Genauigkeit der vorhergesagten Werte über den Trainingssatz verbessert 1-2 Prozentpunkte, wenn ich ein Quadrat-Funktion für das Alter (dh Polynomgrad 2) hinzufügen, aber Wenn ich den Grad 3 mache, wie im obigen Code, kehrt die Genauigkeit tatsächlich zum selben wie für den linearen Fall zurück (dh Grad = 1). Theoretisch sollte es sich leicht verbessern oder gleich bleiben wie bei Grad = 2. Dieses Verhalten gilt auch für alle höheren Stufen. Ich bin sehr neu in Scikit Learn, und ich würde mich über jeden Einblick freuen, was ich falsch mache.
"** Theoretisch ** sollte es verbessern ..." - Sie meinen ** intuitiv ** Sie glauben, es sollte sich verbessern. Es ist wichtig, die beiden nicht zu verwirren :) –