如何提升sklearn中LogisticRegression模型的准确率?当前准确率仅0.712
提升LogisticRegression模型准确率的可行方法
一、先修正代码中的明显错误
你当前代码里的train_test_split(df, y)存在问题:这里的df应该替换为之前定义的特征集x,如果传入整个数据集,会把目标变量y混入训练特征中,造成数据泄露,直接影响模型性能。修正后代码:
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=42)
二、特征工程优化
1. 特征筛选与分布优化
- 计算特征与目标变量的相关性:用
data.corr()生成相关系数矩阵,保留与y相关性较高(绝对值建议≥0.1)的特征,剔除无意义的噪声特征。 - 修正偏态特征:从数据截图看部分特征可能存在右偏分布,可通过对数变换(
np.log1p())或Box-Cox变换让特征更接近正态分布,适配Logistic回归的线性假设。 - 类别特征编码:如果存在类别型特征(如截图中部分离散值特征),需用独热编码(
OneHotEncoder)或目标编码(TargetEncoder)处理,不能直接传入原始类别值。
2. 特征交互与衍生
- 构造交互项:对相关性较高的特征组合生成交互特征(如
A1*A2、A3/A4),弥补Logistic回归无法捕捉非线性关系的缺陷。 - 统计型衍生:对连续特征做分箱(如将A1划分为低、中、高三档),或针对分组特征计算均值、方差,挖掘数据隐藏规律。
3. 特征缩放
Logistic回归对特征尺度敏感(默认带L2正则化),需对特征做标准化处理:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() x_train_scaled = scaler.fit_transform(x_train) x_test_scaled = scaler.transform(x_test) # 使用缩放后的特征训练模型 log_model.fit(x_train_scaled, y_train)
三、模型调优
1. 正则化参数调优
通过网格搜索找到最优正则化强度参数C(C越小,正则化越强):
from sklearn.model_selection import GridSearchCV param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100]} grid = GridSearchCV(LogisticRegression(solver='lbfgs', max_iter=1000), param_grid, cv=5) grid.fit(x_train_scaled, y_train) print(grid.best_params_) # 输出最优C值
2. 更换求解器
根据数据规模换用合适的求解器:比如solver='saga'支持L1正则化,适合稀疏特征;solver='liblinear'更适配小数据集,有时能提升收敛效果。
3. 处理类别不平衡
如果目标变量y的类别占比差异大,准确率会失去参考价值,可采取以下措施:
- 用F1-score、AUC-ROC等指标替代准确率评估模型
- 在模型中设置
class_weight='balanced',让模型自动调整类别权重:
log_model = LogisticRegression(solver='lbfgs', max_iter=1000, class_weight='balanced')
- 对数据做重采样:用SMOTE算法过采样少数类,或欠采样多数类
四、数据质量检查
- 缺失值处理:用
data.isnull().sum()统计缺失值,对缺失样本/特征做填充(均值、中位数、众数)或删除。 - 异常值处理:通过箱线图或Z-score识别异常值,删除或修正异常数据,避免干扰模型拟合。
内容的提问来源于stack exchange,提问作者Anh Vu
相关产品推荐
相关产品推荐

