Jupyter Notebook中LinearRegression的model.fit执行时内核挂起无报错
问题分析与解决
核心原因
- 语法错误:代码中
dataset=pd.get_dummies(dataset,drop_first=True一行缺少闭合括号),这会导致代码执行时存在语法问题,干扰后续逻辑的正常运行。 - 特征维度爆炸:你对
Address列做了one-hot编码,而地址属于高基数类别特征(每个地址几乎唯一),这会生成数万甚至数十万的冗余特征,导致X_train的维度急剧膨胀,LinearRegression模型拟合时需要处理超大矩阵,计算量远超常规范围,因此内核一直处于运行状态无法完成。
解决步骤
- 修正语法错误:把
dataset=pd.get_dummies(dataset,drop_first=True改为dataset=pd.get_dummies(dataset,drop_first=True)。 - 处理高基数特征:
- 直接移除
Address列:地址对房价预测价值有限,且会带来维度灾难,修改col_to_use列表,去掉'Address'即可。 - 或编码优化:用频数编码(统计每个地址出现的次数)、目标编码(用该地址对应的房价均值编码)替代one-hot,避免特征数量暴增。
- 直接移除
- 补充缺失值处理:当前仅填充了
CouncilArea和Car的缺失值,BuildingArea的缺失也会影响模型,可考虑用均值、中位数填充。
修正后的示例代码
import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns # 读取数据 dataset = pd.read_csv(r'C:\Users\USER\Downloads\melb_data.csv\melb_data.csv') # 移除Address列,避免维度爆炸 col_to_use = ['Suburb','Rooms','Type','Price','Method','SellerG','Distance','Bedroom2','Car','Bathroom','Landsize','BuildingArea','CouncilArea','Regionname'] dataset = dataset[col_to_use] # 填充缺失值 col_to_fill_zero = ['CouncilArea','Car'] dataset[col_to_fill_zero] = dataset[col_to_fill_zero].fillna(0) # 补充填充BuildingArea的缺失值 dataset['BuildingArea'] = dataset['BuildingArea'].fillna(dataset['BuildingArea'].median()) # 修正语法错误,执行one-hot编码 dataset = pd.get_dummies(dataset, drop_first=True) # 拆分特征与目标变量 X = dataset.drop('Price', axis=1) y = dataset['Price'] # 划分训练测试集 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2) # 训练模型 from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train)
内容的提问来源于stack exchange,提问作者Jamilu
相关产品推荐
相关产品推荐

