求Python的孪生支持向量回归代码

孪生支持向量回归是基于支持向量回归算法的一种改进方法。求Python的孪生支持向量回归代码,万分感谢

TSVR.py


import numpy as np
from sklearn import preprocessing
from sklearn.base import BaseEstimator, RegressorMixin 
import KernelFunction as kf
import TwinPlane1
import TwinPlane2

#__copyright__ = ""
#__license__ = "GPL"
# __version__ = "1.1"
# __maintainer__ = "Arnav Kansal"
# __email__ = "ee1130440@ee.iitd.ac.in"
# __status__ = "Production"

class TwinSVMRegressor(BaseEstimator, RegressorMixin):
    def __init__(self,Epsilon1=0.1, Epsilon2=0.1, C1=1, C2=1,kernel_type=0,kernel_param=1,regulz1=0.0001, regulz2=0.0001,_estimator_type="regressor"):
        self.Epsilon1=Epsilon1
        self.Epsilon2=Epsilon2
        self.C1=C1
        self.C2=C2
        self.regulz1 = regulz1
        self.regulz2 = regulz2
        self.kernel_type=kernel_type
        self.kernel_param=kernel_param
        
    def fit(self, X, Y):
        Y=Y.values.reshape(len(Y),1)
        assert (type(self.Epsilon1) in [float,int,long])
        assert (type(self.Epsilon2) in [float,int,long])
        assert (type(self.C1) in [float,int,long])
        assert (type(self.C2) in [float,int,long])
        assert (type(self.regulz1) in [float,int,long])
        assert (type(self.regulz2) in [float,int,long])
        assert (type(self.kernel_param) in [float,int,long])
        assert (self.kernel_type in [0,1,2,3])
        r_x,c=X.shape
        r_y=Y.shape[0]
        assert (r_x==r_y)
        r=r_x
        




        e=np.ones((r,1))
        
        if(self.kernel_type==0): # no need to cal kernel
            H = np.hstack((X,e))
        else:
            H = np.zeros((r,r))
            
            for i in range(r):
                for j in range(r):
                    H[i][j] = kf.kernelfunction(self.kernel_type,X[i],X[j],self.kernel_param)
            H = np.hstack((H,e))
            
        #####################Calculation of Function Parameters(Equation of planes) 
        print H
        [w1,b1] = TwinPlane1.Twin_plane_1(H,Y,self.C1,self.Epsilon1,self.regulz1)
        [w2,b2] = TwinPlane2.Twin_plane_2(H,Y,self.C2,self.Epsilon2,self.regulz2)
        self.plane1_coeff_ = w1
        self.plane1_offset_ = b1
        self.plane2_coeff_ = w2
        self.plane2_offset_ = b2
        self.data_ = X

        np.savetxt("w1.txt",w1)
        np.savetxt("b1.txt",b1)
        np.savetxt("w2.txt",w2)
        np.savetxt("b2.txt",b2)


        return self


    def get_params(self, deep=True):
        return {"Epsilon1": self.Epsilon1, "Epsilon2": self.Epsilon2, "C1": self.C1, "C2": self.C2, "regulz1": self.regulz1,
                "regulz2":self.regulz2, "kernel_type": self.kernel_type, "kernel_param": self.kernel_param}

    def set_params(self, **parameters):
        for parameter, value in parameters.items():
            #self.setattr(parameter, value)
            setattr(self,parameter, value)
        return self


    def predict(self, X):
        #X_test = preprocessing.scale(X)    
        if(self.kernel_type==0): # no need to cal kernel
            S = X
        else:
            S = np.zeros((X.shape[0],self.data_.shape[0]))
            for i in range(X.shape[0]):
                for j in range(self.data_.shape[0]):
                    S[i][j] = kf.kernelfunction(self.kernel_type,X[i],self.data_[j].T,self.kernel_param)


        
        y1 = np.dot(S,self.plane1_coeff_)+ ((self.plane1_offset_)*(np.ones((X.shape[0],1))))

        y2 = np.dot(S,self.plane2_coeff_)+ ((self.plane2_offset_)*(np.ones((X.shape[0],1))))

        ###############Compute test data predictions

        return (y1+y2)/2