ML之LiR&2PolyR:使用线性回归LiR、二次多项式回归2PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)

简介: ML之LiR&2PolyR:使用线性回归LiR、二次多项式回归2PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)

输出结果

image.png

image.png


设计思路

image.png


核心代码

poly2 = PolynomialFeatures(degree=2)

X_train_poly2 = poly2.fit_transform(X_train)

r_poly2 = LinearRegression()          

r_poly2.fit(X_train_poly2, y_train)  

poly2 = r_poly2.predict(xx_poly2)


class PolynomialFeatures(BaseEstimator, TransformerMixin):

   """Generate polynomial and interaction features.

 

   Generate a new feature matrix consisting of all polynomial combinations

   of the features with degree less than or equal to the specified degree.

   For example, if an input sample is two dimensional and of the form

   [a, b], the degree-2 polynomial features are [1, a, b, a^2, ab, b^2].

 

   Parameters

   ----------

   degree : integer

   The degree of the polynomial features. Default = 2.

 

   interaction_only : boolean, default = False

   If true, only interaction features are produced: features that are

   products of at most ``degree`` *distinct* input features (so not

   ``x[1] ** 2``, ``x[0] * x[2] ** 3``, etc.).

 

   include_bias : boolean

   If True (default), then include a bias column, the feature in which

   all polynomial powers are zero (i.e. a column of ones - acts as an

   intercept term in a linear model).

 

   Examples

   --------

   >>> X = np.arange(6).reshape(3, 2)

   >>> X

   array([[0, 1],

   [2, 3],

   [4, 5]])

   >>> poly = PolynomialFeatures(2)

   >>> poly.fit_transform(X)

   array([[  1.,   0.,   1.,   0.,   0.,   1.],

   [  1.,   2.,   3.,   4.,   6.,   9.],

   [  1.,   4.,   5.,  16.,  20.,  25.]])

   >>> poly = PolynomialFeatures(interaction_only=True)

   >>> poly.fit_transform(X)

   array([[  1.,   0.,   1.,   0.],

   [  1.,   2.,   3.,   6.],

   [  1.,   4.,   5.,  20.]])

 

   Attributes

   ----------

   powers_ : array, shape (n_output_features, n_input_features)

   powers_[i, j] is the exponent of the jth input in the ith output.

 

   n_input_features_ : int

   The total number of input features.

 

   n_output_features_ : int

   The total number of polynomial output features. The number of output

   features is computed by iterating over all suitably sized combinations

   of input features.

 

   Notes

   -----

   Be aware that the number of features in the output array scales

   polynomially in the number of features of the input array, and

   exponentially in the degree. High degrees can cause overfitting.

 

   See :ref:`examples/linear_model/plot_polynomial_interpolation.py

   <sphx_glr_auto_examples_linear_model_plot_polynomial_interpolation.

    py>`

   """

   def __init__(self, degree=2, interaction_only=False, include_bias=True):

       self.degree = degree

       self.interaction_only = interaction_only

       self.include_bias = include_bias

 

   @staticmethod

   def _combinations(n_features, degree, interaction_only, include_bias):

       comb = combinations if interaction_only else combinations_w_r

       start = int(not include_bias)

       return chain.from_iterable(comb(range(n_features), i) for

           i in range(start, degree + 1))

 

   @property

   def powers_(self):

       check_is_fitted(self, 'n_input_features_')

       combinations = self._combinations(self.n_input_features_, self.

        degree,

           self.interaction_only,

           self.include_bias)

       return np.vstack(np.bincount(c, minlength=self.n_input_features_) for

           c in combinations)

 

   def get_feature_names(self, input_features=None):

       """

       Return feature names for output features

       Parameters

       ----------

       input_features : list of string, length n_features, optional

           String names for input features if available. By default,

           "x0", "x1", ... "xn_features" is used.

       Returns

       -------

       output_feature_names : list of string, length n_output_features

       """

       powers = self.powers_

       if input_features is None:

           input_features = ['x%d' % i for i in range(powers.shape[1])]

       feature_names = []

       for row in powers:

           inds = np.where(row)[0]

           if len(inds):

               name = " ".join(

                   "%s^%d" % (input_features[ind], exp) if exp != 1 else

                    input_features[ind] for

                   (ind, exp) in zip(inds, row[inds]))

           else:

               name = "1"

           feature_names.append(name)

     

       return feature_names

 

   def fit(self, X, y=None):

       """

       Compute number of output features.

       Parameters

       ----------

       X : array-like, shape (n_samples, n_features)

           The data.

       Returns

       -------

       self : instance

       """

       n_samples, n_features = check_array(X).shape

       combinations = self._combinations(n_features, self.degree,

           self.interaction_only,

           self.include_bias)

       self.n_input_features_ = n_features

       self.n_output_features_ = sum(1 for _ in combinations)

       return self

 

   def transform(self, X):

       """Transform data to polynomial features

       Parameters

       ----------

       X : array-like, shape [n_samples, n_features]

           The data to transform, row by row.

       Returns

       -------

       XP : np.ndarray shape [n_samples, NP]

           The matrix of features, where NP is the number of polynomial

           features generated from the combination of inputs.

       """

       check_is_fitted(self, ['n_input_features_', 'n_output_features_'])

       X = check_array(X, dtype=FLOAT_DTYPES)

       n_samples, n_features = X.shape

       if n_features != self.n_input_features_:

           raise ValueError("X shape does not match training shape")

       # allocate output data

       XP = np.empty((n_samples, self.n_output_features_), dtype=X.dtype)

       combinations = self._combinations(n_features, self.degree,

           self.interaction_only,

           self.include_bias)

       for i, c in enumerate(combinations):

           :i]XP[ = X[:c].prod(1)

     

       return XP


相关文章
|
5天前
|
数据可视化 Python
Python进行多输出(多因变量)回归:集成学习梯度提升决策树GRADIENT BOOSTING,GBR回归训练和预测可视化
Python进行多输出(多因变量)回归:集成学习梯度提升决策树GRADIENT BOOSTING,GBR回归训练和预测可视化
11 0
Python进行多输出(多因变量)回归:集成学习梯度提升决策树GRADIENT BOOSTING,GBR回归训练和预测可视化
|
6天前
广义线性模型glm泊松回归的lasso、弹性网络分类预测学生考试成绩数据和交叉验证
广义线性模型glm泊松回归的lasso、弹性网络分类预测学生考试成绩数据和交叉验证
|
7天前
|
机器学习/深度学习 算法 数据可视化
R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例
R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例
20 0
|
6月前
|
机器学习/深度学习 传感器 算法
INFO-XGBOOST回归预测 | Matlab 向量加权优化xgboost(INFO-XGBOOST) 回归预测
INFO-XGBOOST回归预测 | Matlab 向量加权优化xgboost(INFO-XGBOOST) 回归预测
ML之LiR&LassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估
ML之LiR&LassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估
ML之LiR&LassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估
|
算法 数据可视化
ML之LiR&Lasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)
ML之LiR&Lasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)
ML之LiR&Lasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)
ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
ML之LiR&2PolyR&4PolyR:使用线性回归LiR、二次多项式回归2PolyR、四次多项式回归4PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)
ML之LiR&2PolyR&4PolyR:使用线性回归LiR、二次多项式回归2PolyR、四次多项式回归4PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)
ML之LiR&2PolyR&4PolyR:使用线性回归LiR、二次多项式回归2PolyR、四次多项式回归4PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)
ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
|
计算机视觉 Python
ML之4PolyR:利用四次多项式回归4PolyR模型+两种正则化(Lasso/Ridge)在披萨数据集上拟合(train)、价格回归预测(test)
ML之4PolyR:利用四次多项式回归4PolyR模型+两种正则化(Lasso/Ridge)在披萨数据集上拟合(train)、价格回归预测(test)
ML之4PolyR:利用四次多项式回归4PolyR模型+两种正则化(Lasso/Ridge)在披萨数据集上拟合(train)、价格回归预测(test)

热门文章

最新文章