gpt4 book ai didi

python - 在 Scikit Learn 中拟合逻辑模型时,多项式特征无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:58 25 4
gpt4 key购买 nike

Kaggle 在泰坦尼克号上有一个介绍性数据科学问题,其目标是根据乘客的一些信息(例如性别、年龄、舱等)来预测乘客的生存机会。我使用 Scikit Learn 在 Python 中为此实现了一个简单的逻辑回归模型,并且我正在探索添加“年龄”变量的更高阶因子。我按照 Scikit Learn 网站上的说明使用 PolynomialFeatures:

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)

当我添加年龄的平方特征(即多项式次数为 2)时,我在训练集上的预测值的准确性提高了 1-2 个百分点,但是当我将次数设为 3 时,如上面的代码所示,准确性实际上恢复到与线性情况相同(即度= 1)。理论上,它应该略有改善或保持与度数 = 2 相同。对于所有更高的度数,这种行为也会持续下去。我对 Scikit Learn 非常陌生,如果您能了解我做错了什么,我将不胜感激。

最佳答案

添加更多变量时,准确性不必提高或保持不变。添加更多特征会降低模型精度,这一事实说明添加特征的重要性。

当一个新特征被添加到模型中时,无论它是否具有统计显着性(即“相当大”影响模型结果),都会观察到模型中较小的变化。因此,一些所得系数(例如 R^2)将会增加。然而,模型的准确性可能会下降,因为添加不显着的特征可能会对与新特征相关的现有解释变量的显着性产生负面影响。

您的示例:当您使用多项式特征时,必须始终谨慎对待更高的次数。对于二级情况,准确性会提高,因为结果与年龄变量之间的关系是二次的。但是当你将阶数增加到3时,会添加立方Age,这是一个微不足道的特征。虽然它不会因为微不足道而提高准确性,但由于与年龄和年龄平方相关,它也会降低准确性。年龄平方(显着)和年龄立方(不显着)变量之间的相关性使得年龄平方也不显着,从而降低了整体预测能力。

关于python - 在 Scikit Learn 中拟合逻辑模型时,多项式特征无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37307883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com