m0_60771227 2022-06-08 09:34 采纳率: 28.6%
浏览 96
已结题

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

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

  • 写回答

1条回答 默认 最新

  • 懒羊羊的南瓜屋 2022-06-08 10:49
    关注

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月17日
  • 已采纳回答 6月9日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。