绘制单特征拟合曲线
def curve_plot(X, y_predict):
"""
绘制单个特征的拟合曲线
:param X: 特征, X[:, 0]是取X的一次项
:param y_predict: 拟合结果
:return:
"""
plt.scatter(X, y)
plt.plot(np.sort(X[:, 0]), y_predict[np.argsort(X[:, 0])], color="r")
plt.show()
curve_plot(X, y_predict)
单特征学习曲线
def learning_curve(algo, X_train, X_test, y_train, y_test):
"""
绘制学习曲线, 使用均方误差
:param algo: fit后的模型
:param X_train: 训练集特征
:param X_test: 测试集特征
:param y_train: 训练集目标
:param y_test: 测试集目标
"""
train_scores, test_scores = [], []
for i in range(1, len(X_train) + 1):
algo.fit(X_train[:i], y_train[:i])
y_train_predict = algo.predict(X_train)
train_scores.append(
mean_squared_error(y_train[:i], y_train_predict[:i]))
y_test_predict = algo.predict(X_test)
test_scores.append(
mean_squared_error(y_test, y_test_predict))
plt.plot(
[i for i in range(1, len(X_train) + 1)],
np.sqrt(train_scores),
label="train")
plt.plot(
[i for i in range(1, len(X_train) + 1)],
np.sqrt(test_scores),
label="test")
plt.legend()
plt.axis([0, len(X_train) + 1, 0, 4])
plt.show()
learning_curve(poly_reg, X_train, X_test, y_train, y_test)