预处理指令在winform怎么使用

2023-04-15 17:35 43次浏览 攻略

为了提高线性方法的性能,一种常用的方法是使用数据的非线性函数来训练线性模型。此外,这种方法,更广泛的数据范围也可以适合于机器学习模型。

对于3个特征我们的线性模型是这样的:

在多项式回归中,利用给定的特征创建新特征的成像。如果我们用模型拟合抛物面而不是平面,那么上面的函数可以写成:

乍一看,这个模型似乎并不是线性的。但是,如果您将乘法特征视为单个变量,即a1 = x1 * x2,a2 = x1 ** 2等,则此模型在'w'中仍然是线性的。

现在,让我们使用Python来编写代码。让我们首先导入通常的库和sklearn库。

import numpy as np

import ma as plt

import seaborn as sns

('whitegrid')

% matplotlib inline

import pandas as pd

from import LinearRegression

from import r2_score

现在让我们创建一些我们自己的数据,这些数据更适合抛物面而不是简单的平面。

n_samples = 100

X = np.linspace(0, 10, 100)

y = X ** 3 + np.random.randn(n_samples) * 100 + 100

(figsize=(10,8))

(X, y)

您的数据点可能看起来有点不同,但这并不重要。现在,让我们执行线性回归,看看简单线性模型与这种数据的匹配程度。

lin_reg = LinearRegression()

lin_reg.fi(-1, 1), y)

model_pred = lin_reg.predic(-1,1))

(figsize=(10,8));

(X, y);

(X, model_pred);

print(r2_score(y, model_pred))

R2分数为0.7765,曲线图出现这种情况。正如您所看到的,模型似乎不能很好地表示数据,因为许多实际数据点远离回归线。

现在,让我们使用多项式特征,看看结果模型是怎样的。为此,我们将从sklearn中导入一个预处理函数。

from import PolynomialFeatures

然后,让我们拟合变换数据以给出多项式特征。这里,我们使用degree = 2作为抛物线函数。

poly_reg = PolynomialFeatures(degree=2)

X_poly = (-1, 1))

现在让我们实例化另一个线性回归模型,然后使用多项式特征(即X_poly)拟合模型。

lin_reg_2 = LinearRegression()

lin_reg_2.fit(X_poly, y.reshape(-1, 1))

y_pred = lin_reg_2.predict(X_poly)

(figsize=(10,8));

(X, y);

(X, y_pred);

print(r2_score(y, y_pred))

Polynomial degree = 2

R2得分为0.899,图形看起来像这样。显然,2阶的多项式特征有助于更好地拟合数据而不是简单的线性特征。

您可以使用这种方法调整特性的程度,并更改模型如何适合不同类型的数据。

例如,如果我将degree = 3用于多项式特征,

poly_reg_2 = PolynomialFeatures(degree=3)

X_poly_2 = (-1, 1))

然后,和以前一样

lin_reg_3 = LinearRegression()

lin_reg_3.fit(X_poly_2, y.reshape(-1, 1))

y_pred = lin_reg_3.predict(X_poly)

(figsize=(10,8));

(X, y);

(X, y_pred);

print(r2_score(y, y_pred))

Polynomial degree = 3

R2得分为0.90,图形看起来像这样。在这里,由于数据点有限, degree 3无法看到很多效果。但是,如果最后有数据弯曲,则 degree 3特征可能非常有用。

因此,下次如果您发现数据不仅仅是回归线性,请使用多项式特征来模拟您的机器学习模型,以便最适合您的训练,测试和hold-out集。

相关推荐