創建處理數據的基類

BaseEstimator類用來處理輸入數據的格式

類內的全局變量有\[X,y,y\_{required},fit_{required}\]python

\[X,y\]經過__setup_input()方法將\[X,y\]變爲numpy.ndarray類型數組

若是輸入數據沒有\[y\], 則\[y\_{required} = False\]ui

處理輸入數據\[X\]的步驟以下:

  1. 若X不是numpy.ndarray類型,則轉換類型;

  2. 若X爲空數組,則提示值錯誤;

  3. 若X的維數爲1,則X的樣本數爲1,X的特徵數目爲X.shape[0];

  4. 若X的維數不爲1,則X的樣本數爲X.shape[0],X的特徵數目爲其餘維數的長度之積。



若是輸入了\[y\],則對\[y\]處理的步驟以下:

  1. 若須要輸入y卻沒有輸入y,則提示錯誤;

  2. 若X不是numpy.ndarray類型,則轉換類型;

  3. 若輸入了y,可是大小爲0,則提示錯誤。


spa

# coding: utf-8
import numpy as np


class BaseEstimator(Object):
    X = None
    y = None
    y_required = True
    fit_required = True
    def __setup_input(self,X,y=None):
        if not isinstance(X,np.ndarray):
            X = np.array(X)
        
        if X.size == 0:
            raise ValueError('Number of feautures must be > 0 ')
        
        if X.ndim == 1:
            self.n_samples, self.n_feautures = 1, X.shape
        else:
            self.n_samples, self.n_feautures = X.shape[0], np.prod(X.shape[1:])

        self.X = X

        if self.y_required:
            if y is None:
                raise ValueError('Missed required argument y ')

            if not isinstance(y,np.ndarray):
                y = np.array(y)

            if y.size == 0:
                raise ValueError('Number of target y must be > 0')

        self.y = y

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

    def predict(self,X=None):
        if not isinstance(X,np.ndarray):
            X = np.array(X)

        if X is not None or not fit_required:
            return self._predict(X)
        else:
            raise ValueError('You must call fit before predict')

    def _predict(X=None):
        raise NotImplementedError()
相關文章
相關標籤/搜索