python - 尽管我在逻辑回归中使用了 cross_val_score 的交叉验证,但为什么我的数据过度拟合?
问题描述
我在从https://www.kaggle.com/blastchar/telco-customer-churn获取的电信客户流失上使用“WA_Fn-UseC_-Telco-Customer-Churn.csv”文件,以便使用 scikit-learn 的 LogisticRegression 预测流失()。
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
data=pd.read_csv(file)
#get rid of ID's
data=data.iloc[:,1:]
#turn categorical data to dummies
data2=pd.get_dummies(data,columns=['gender', 'Partner', 'Dependents',
'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity',
'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV',
'StreamingMovies', 'Contract','PaperlessBilling', 'PaymentMethod'])
#Some cleaning and adjustment
data2["TotalCharges"].replace('[^0-9.]',np.nan,inplace=True,regex=True)
data2["Churn"].replace(('Yes','No'),(1,0),inplace=True)
data2=data2.dropna()
#assign features and target
X = data2[data2.columns[:-1]] # Features
y = data2.Churn # Target variable
scores=cross_val_score(LogisticRegression(), X, y, cv=10)
print(scores)
但是,这仅打印 1 的分数,我也尝试使用 Shuffle split 的 shuffle。为什么我的数据过度拟合,或者还有其他问题吗?
解决方案
在您的数据清理中,您忘记从训练数据中删除目标列。
得到假人后,'Churn'
不再是最后一列,data2.columns[:-1]
将其留在训练集中,您的模型最终会从中学习。
推荐阅读
- wordpress - 在 wordpress plus elementor 中创建带有帖子标题和网站徽标的动态特色图像
- java - 为 Spring Boot Controller 调用的特定方法设置超时
- excel - Excel 下拉框可以作为带有多选复选框的列表框吗?
- java - Java:根据数组大小设置不同的对象字段
- flutter - 如何在 qr_flutter 中添加文件图像以生成带有嵌入图像的二维码?
- ios - 在没有 Timer 的情况下播放核心动画时如何自动更新 UISlider 的值
- sympy - 如何更改 sympy 向量的乳胶名称?
- jpa - AttributeConverter 在 EclipseLink 中不工作,在 Hibernate 中工作正常
- python - Pandas:使用重复的列将长数据重塑为宽数据
- iphone - 检测来自 iphone 应用程序的 API 调用?