请求提供基于机器学习预测新数据点y值的Python代码
解决小样本回归预测问题的Python实现
Hey there! 作为机器学习新手遇到插值失效的情况太正常了——毕竟插值对数据分布的假设比较强,遇到样本少或者非线性分布的场景就容易掉链子。我给你准备了两种上手简单、效果靠谱的回归方案,完全适配你的数据结构,直接就能跑起来~
方案1:K近邻回归(KNN Regression)
KNN是最适合新手入门的模型之一,原理超直观:找新数据点附近最像的K个样本,用它们的y值加权平均来预测。特别适合你这种小样本场景,不用复杂的参数拟合。
完整代码
# 导入必要的库 import numpy as np from sklearn.neighbors import KNeighborsRegressor # 你的样本数据 x = [(1, 2), (1, 5), (1, 6), (2, 4), (2, 5), (2, 7), (3, 1), (3, 5), (3, 6)] y = [2.3,5.6,9.0,8.6,4.2,13.5,11.0,1.3,5.0] # 把数据转换成sklearn能处理的数组格式 X_train = np.array(x) y_train = np.array(y) # 初始化KNN回归模型,这里选k=3(可以根据效果调整,比如2、4都试试) knn_model = KNeighborsRegressor(n_neighbors=3) # 训练模型(KNN其实没有"训练"过程,只是把数据存起来) knn_model.fit(X_train, y_train) # 要预测的新数据点 new_points = np.array([(2, 3), (3, 4)]) # 执行预测 predictions_knn = knn_model.predict(new_points) # 输出结果 print("KNN回归预测结果:") for point, pred in zip(new_points, predictions_knn): print(f"数据点{point}对应的y预测值:{round(pred, 2)}")
小提示
- 可以调整
n_neighbors的值试试:k太小容易过拟合(受异常值影响大),k太大容易欠拟合(预测结果太模糊) - 如果你的数据特征量纲不一样,记得先做标准化(
from sklearn.preprocessing import StandardScaler)
方案2:梯度提升回归树(Gradient Boosting Regressor)
如果后续你的工作数据量变大,或者需要更稳定的预测效果,梯度提升树是更好的选择——它通过多个弱回归树的集成,能捕捉数据的非线性关系,效果比KNN更鲁棒。
完整代码
# 导入必要的库 import numpy as np from sklearn.ensemble import GradientBoostingRegressor # 你的样本数据 x = [(1, 2), (1, 5), (1, 6), (2, 4), (2, 5), (2, 7), (3, 1), (3, 5), (3, 6)] y = [2.3,5.6,9.0,8.6,4.2,13.5,11.0,1.3,5.0] # 转换数据格式 X_train = np.array(x) y_train = np.array(y) # 初始化梯度提升回归模型,参数可以按需调整 gbr_model = GradientBoostingRegressor( n_estimators=100, # 弱树的数量,默认100,不用改也能跑 learning_rate=0.1, # 学习率,越小模型越稳定但训练越慢 max_depth=3 # 树的最大深度,防止过拟合 ) # 训练模型 gbr_model.fit(X_train, y_train) # 要预测的新数据点 new_points = np.array([(2, 3), (3, 4)]) # 执行预测 predictions_gbr = gbr_model.predict(new_points) # 输出结果 print("\n梯度提升回归预测结果:") for point, pred in zip(new_points, predictions_gbr): print(f"数据点{point}对应的y预测值:{round(pred, 2)}")
小提示
- 新手可以先默认参数跑起来,后续再调
n_estimators和max_depth优化效果 - 可以用交叉验证评估模型性能:
from sklearn.model_selection import cross_val_score,比如scores = cross_val_score(gbr_model, X_train, y_train, cv=3),看看模型的泛化能力
内容的提问来源于stack exchange,提问作者Abhas kumar
相关产品推荐
相关产品推荐

