python - 排序数据未绘制在正确的数据点中
问题描述
这似乎是一个 sklearn 问题,但它不是(至少不是直接的)。我只是在这里使用 sklearn 来获取数据点,因为这将能够完全重现我的问题。一些背景
我用来sklearn
在一个小区间内预测一些点。X
首先,我用二维向量(矩阵中的行)构建了一个合成域。
y= x_1 + x_2 + noise
然后我使用这些行和一些噪声计算一些图像点x=(x_1, x_2)
,以尝试复制一些真实数据。
X
为了进行回归(也称为插值),作为方法的一部分,我使用命令从域中随机选择向量/点(这里以矩阵形式它们是行)train_test_split
,我将跳过细节,但结果数组是随机子集空间(空间是(x_1, x_2, y)
我(x_1, x_2)
紧凑的支持。
然后我使用 sklearn 进行回归,到目前为止一切顺利。一切都按预期工作。我参与y_pred_test_sine
了预测,它们运行良好。但是由于该方法从域中选择随机点作为测试集,因此预测完全被打乱了。
问题来了……
由于我想将其绘制为连续函数(由 matplotlib 插值,这没关系,稍后我将使用自己的插值测试)。我做两件事:
- 使用来自测试的排序预测图像点创建一个新向量
X_test_sort
- 使用来自测试的排序域点创建一个新向量。
y_pred_test_sine_sort
这些(1)和(2)匹配(至少应该)预测模型中的每个数据点(这些仅排序以便使用plt.plot
线条轻松绘制,而不是标记)
然后我绘制它们并且它们不匹配(完全)我的解决方案空间中的预期点。
在这里我们可以看到全黑线(排序后的预测线)不跟随橙色点(预测点)。这根本不是我所期望的。
这里按照代码重现问题。
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
plt.close('all')
rng = np.random.RandomState(42)
regressor = LinearRegression()
# Synthetic dataset
x_1 = np.linspace(-3, 3, 300)
x_2 = np.sin(4*x_1)
noise = rng.uniform(size=len(x_1))
y = x_1 + x_2 + noise
X = np.vstack((x_1, x_2)).T
# Data splitting
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# Regression 2 features data
fit_sine = regressor.fit(X_train, y_train)
y_pred_test_sine = regressor.predict(X_test)
# Here I have sorted the X values and its image points Y = f(x)
# Why those are not correctly placed over the 'prediction' points
X_test_sort = np.sort(X_test[:,0].ravel())
y_pred_test_sine_sort = np.sort(y_pred_test_sine.ravel())
# DO THE PLOTTING
plt.plot(X_test[:,0], y_test, 'o', alpha=.5, label='data')
plt.plot(X_test[:,0], y_pred_test_sine, 'o', alpha=.5, label='prediction')
plt.plot(X_test_sort, y_pred_test_sine_sort, 'k', label='prediction line')
plt.plot(x, np.sin(4*x)+x+.5, 'k:', alpha=0.3, label='trend')
plt.legend()
解决方案
推荐阅读
- ios - 快速按钮单击以显示带有工具栏视图的键盘
- typescript - 如何使用带有 Typescript 的 expo AppLoading 组件?
- javascript - 使用整数数组参数的排序函数不起作用
- sql - 查找所有开头包含“+7”的数字
- java - 无法检测到 NoMoreReturnsException 的来源
- python - cx_Freeze 不想将图标应用于 .exe 文件
- google-sheets - 查找值并将它们添加到动态工作表中的表中
- wordpress - 用户(图像)上的 WP ACF 字段不时消失
- list - 如果 Flutter 中的网格列表为空,则插入 Text()
- javascript - 两个复制文本按钮?