线性回归
import numpy as np
import random
'''
input_data 训练数据集
realresult 训练结果集
theta 参数'''
def _init_ ( self, input_data, realresult, theta= None ) : ''':param self::param input_data: 输入数据:param realresult: 真实数据:param theta: 线性回归参数,默认为None:return:''' row, col= np. shape( input_data) self. InputData= [ 0 ] * rowfor ( index, data) in enumerate ( input_data) : Data= [ 1.0 ] Data. extend( list ( data) ) self. InputData[ index] = Dataself. InputData= np. array( self. InputData) self. Result= realresultif theat is not None : self. Theta= thetaelse : sel . Theta= np. random. normal( ( col+ 1 , 1 ) )
def BGD ( self, alpha) : '''利用BGD算法进行一次迭代调整参数的函数:param self::param alpha: 学习率:return:''' gradient_increasment= [ ] for ( input_data, real_result) in zip ( self. InputData, self. Result) : g= ( real_result- input_data. dot( self. Theta) ) * input_datagradient_increasment. append( g) avg_g= np. average( gradient_increasment, 0 ) avg_g= avg_g. reshape( ( len ( avg_g) , 1 ) ) self. Theta= self. Theta+ alpha* avg_g
def SGD ( self, alpha) : '''利用SGD算法进行一次迭代调整参数的函数:param self::param alpha:学习率:return:''' shuffle_sequence= self. Shuffle_Squence( ) self. InputData= self. InputData[ shuffle_sequence] self_Resule= self. Result[ shuffle_sequence] for ( input_data, real_result) in zip ( self. InputData, self_Resule) : g= ( real_result- input_data. dot( self. Theta) ) * input_datag= g. reshape( ( len ( g) , 1 ) ) self_Theta= self_Theta+ alpha. g
def MBGD ( self, alpha, batch_size) : '''利用MBGD算法进行一次迭代调整参数的函数:param self::param alpha::param batch_size::return:''' shuffle_sequence= self. Shuffle_Squence( ) self. InputData= self. InputData[ shuffle_sequence] self. Result= self. Result[ shuffle_sequence] for start in np. arange( 0 , len ( shuffle_sequence) , batch_size) : end= np. min ( [ start+ batch_size, len ( shuffle_sequence) ] ) mini_batch= shuffle_sequence[ start: end] Mini_Train_Data= self. InputData[ mini_batch] Mini_Train_Result= self. Result[ mini_batch] gradient_increasement= [ ] for ( data, result) in zip ( Mini_Train_Data, Mini_Train_Result) : g= ( result- data. dot( self, Theta) ) * datagradient_increasement. append( g) avg_g= np. average( gradient_increasement, 0 ) avg_g= avg_g. reshape( ( len ( avg_g) , 1 ) ) self. Theta= self. Theta+ alpha* avg_g'''
迭代训练函数
'''
def train_BGD ( self, iter , alpha) : '''利用BGD算法迭代优化的函数:param self::param iter: 迭代次数:param alpha: 优化率:return:''' Cost= [ ] for i in range ( iter ) : self. BGD( alpha) Cost. append( self. Cost( ) ) Cost= np. array( Cost) return Costdef train_SGD ( self, iter , alpha) : '''利用SGD算法迭代优化的函数:param self::param iter::param alpha::return:''' Cost = [ ] for i in range ( iter ) : self. SGD( alpha) Cost. append( self. Cost( ) ) Cost = np. array( Cost) return Costdef train_MBGD ( self, iter , batch_size, alpha) : '''利用MBGD算法迭代优化的函数:param self::param iter::param batch_size::param alpha::return:''' Cost = [ ] for i in range ( iter ) : self. MBGD( alpha) Cost. append( self. Cost( ) ) Cost = np. array( Cost) return Cost'''
正则方程函数
''' def getNormalEquation ( self) : '''利用正则方程计算模型参数self.Theta:param self::return:''' col, rol= np. shape( self. InputData. T) XT= self. InputData. T+ 0.001 * np. eye( col, rol)
import numpy as np
def _init_ ( self, train_data, train_result) : ''':param self::param train_data: 输入训练数据:param train_result: 训练数据真实结果:return:''' row, col= np. shape( train_data) self. Train_Data= [ 0 ] * rowfor ( index, data) in enumerate ( train_data) : Data= [ 1.0 ] Data. extend( list ( data) ) self. Train_Data[ index] = Dataself. Train_Data= np. array( self. Train_Data)
self. Train_Result= train_result
self. weight= np. zeros( ( row, row) ) self. Theta= [ ] def Gaussian_Weight ( self, data, k) : '''计算测试权重的函数:param self::param data: 输入数据:param k: 带宽系数:return:''' sum = np. sum ( data* data) return np. exe( sum / ( - 2.0 * k** 2 ) )