我已经对数据集执行了岭回归模型 (链接到数据集:https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data) 如下:
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
y = train['SalePrice']
X = train.drop("SalePrice", axis = 1)
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.30)
ridge = Ridge(alpha=0.1, normalize=True)
ridge.fit(X_train,y_train)
pred = ridge.predict(X_test)
我使用sklearn中的指标库计算了MSE
from sklearn.metrics import mean_squared_error
mean = mean_squared_error(y_test, pred)
rmse = np.sqrt(mean_squared_error(y_test,pred)
我得到了非常大的MSE = 554084039.54321
和RMSE = 21821.8
值,我试图了解我的实现是否正确。
答案 0 :(得分:1)
您的RMSE
实现是正确的,当您使用sklearn的mean_squared_error
的平方根时,很容易验证。
尽管如此,我认为您仍然缺少右括号:
rmse = np.sqrt(mean_squared_error(y_test,pred)) # the last one was missing
您的MSE很高,因为模型无法很好地模拟变量和目标之间的关系。请记住,每个错误的取值为2的幂,因此在价格飞涨1000
时,会将值100000
取消。
您可能希望使用自然对数(numpy.log
)修改价格并将其转换为对数比例,这是一种常见的做法,尤其是针对此问题(我假设您正在使用House Prices: Advanced Regression Techniques),请参阅可用的内核以获取指导。使用这种方法,您将不会获得这么大的价值。
最后但并非最不重要的一点是,请检查Mean Absolute Error,以确保您的预测并不像看起来那样可怕。