#인덱스로부터 훈련과 테스트 그룹을 분리한다.
#rom sklearn.model_selection import train_test_split
#train, test=train_test_split(da, test_size=0.25, random_state=3)로 대체할 수 있다.
def divideTrainS(obj, size, rep):
x=np.random.choice(obj, size, rep)
y=np.delete(range(obj), x)
return([x, y])
#원자료에서 설명변수와 반응변수를 새로 구성한 자료작성
def indDeS(da, deColN, diffDay):
n=len(da)
indN=np.delete(range(len(da.columns)), deColN)
da1=pd.DataFrame(da.ix[:(n-1), indN])
y=da.ix[:, deColN].shift(-diffDay)
da1['de']=y
targD=da.ix[-1, indN]
return([da1, targD])
#sklearn LinearRegression을 적용하는 경우 summary를 반환하는 함수
def LinearRegSummaryS(model, ind, de):
re={}
re["intercept"]=model.intercept_
re["coef"]=model.coef_
re["R^2"]=model.score(ind, de)
p=model.predict(ind)
res=de-p
re["SSR"]=np.dot(np.transpose(res), res)
re["MSR"]=re["SSR"]/(len(ind)-(np.shape(ind)[1]+1))
return(re)
#다차항 회귀에서 차수 증가에 따른 R2, MSE, SSE의 변화를 반환한다.
def BestOrderFindS(ind, de, n):
sse=np.empty(n+1)
mse=np.empty(n+1)
r2=np.empty(n+1)
for i in range(n+1):
poly=PolynomialFeatures(i)
x=poly.fit_transform(ind)
mod=LinearRegression()
mod.fit(x, de)
pre=mod.predict(x)
y1=de-np.mean(de)
sst=np.dot(np.transpose(y1), y1)
res=de-mod.predict(x)
sse[i]=np.dot(np.transpose(res), res)
mse[i]= sse[i]/(len(x)-(np.shape(x)[1]+1))
r2[i]= 1-sse[i]/sst
re=np.c_[r2, mse, sse]
re.names
return()
#자료의 표준화와 새로운 데이터를 표준화 시킨 평균과 표준편차에 의해 표준화시킴
class StdardS:
def __init__(self, d):
self.d=d
try:
self.n=self.d.shape[1]
except:
self.n=1
else:
self.n=self.d.shape[1]
if self.n !=1:
self.mu=[np.mean(self.d[:,i]) for i in range(self.n)]
self.sd=[np.var(self.d[:,i])**0.5 for i in range(self.n)]
else:
self.mu=np.mean(self.d)
self.sd=np.var(self.d)**0.5
def stdard1(self):
if self.n != 1:
re=[(self.d[:,i]-self.mu[i])/self.sd[i] for i in range(self.n)]
else:
re= (self.d-self.mu)/self.sd
return(np.transpose(re))
def stdard2(self, nd):
if self.n != 1:
self.nd=nd
re1=[(self.nd[i]-self.mu[i])/self.sd[i] for i in range(self.n)]
else:
re1=(self.nd-self.mu)/self.sd
return(np.transpose(re1))
#np.array 구조의 객체 각 원소의 빈도수를 계산한다.
def FreqS(obj):
idx, cnt=np.unique(obj, return_counts=True)
re=np.transpose(np.array([idx, cnt]))
return(re)
#위 함수와 유사하지만 구간의 빈도수를 계산한다. histogram() 함수를 적용
def histS(obj, n):
cnt, mu=np.histogram(obj, bins=n)
prob, mu=np.histogram(obj, bins=n, density=True)
re=np.transpose(np.array([mu[1:], cnt, prob]))
return(re)
#rom sklearn.model_selection import train_test_split
#train, test=train_test_split(da, test_size=0.25, random_state=3)로 대체할 수 있다.
def divideTrainS(obj, size, rep):
x=np.random.choice(obj, size, rep)
y=np.delete(range(obj), x)
return([x, y])
#원자료에서 설명변수와 반응변수를 새로 구성한 자료작성
def indDeS(da, deColN, diffDay):
n=len(da)
indN=np.delete(range(len(da.columns)), deColN)
da1=pd.DataFrame(da.ix[:(n-1), indN])
y=da.ix[:, deColN].shift(-diffDay)
da1['de']=y
targD=da.ix[-1, indN]
return([da1, targD])
#sklearn LinearRegression을 적용하는 경우 summary를 반환하는 함수
def LinearRegSummaryS(model, ind, de):
re={}
re["intercept"]=model.intercept_
re["coef"]=model.coef_
re["R^2"]=model.score(ind, de)
p=model.predict(ind)
res=de-p
re["SSR"]=np.dot(np.transpose(res), res)
re["MSR"]=re["SSR"]/(len(ind)-(np.shape(ind)[1]+1))
return(re)
#다차항 회귀에서 차수 증가에 따른 R2, MSE, SSE의 변화를 반환한다.
def BestOrderFindS(ind, de, n):
sse=np.empty(n+1)
mse=np.empty(n+1)
r2=np.empty(n+1)
for i in range(n+1):
poly=PolynomialFeatures(i)
x=poly.fit_transform(ind)
mod=LinearRegression()
mod.fit(x, de)
pre=mod.predict(x)
y1=de-np.mean(de)
sst=np.dot(np.transpose(y1), y1)
res=de-mod.predict(x)
sse[i]=np.dot(np.transpose(res), res)
mse[i]= sse[i]/(len(x)-(np.shape(x)[1]+1))
r2[i]= 1-sse[i]/sst
re=np.c_[r2, mse, sse]
re.names
return()
#자료의 표준화와 새로운 데이터를 표준화 시킨 평균과 표준편차에 의해 표준화시킴
class StdardS:
def __init__(self, d):
self.d=d
try:
self.n=self.d.shape[1]
except:
self.n=1
else:
self.n=self.d.shape[1]
if self.n !=1:
self.mu=[np.mean(self.d[:,i]) for i in range(self.n)]
self.sd=[np.var(self.d[:,i])**0.5 for i in range(self.n)]
else:
self.mu=np.mean(self.d)
self.sd=np.var(self.d)**0.5
def stdard1(self):
if self.n != 1:
re=[(self.d[:,i]-self.mu[i])/self.sd[i] for i in range(self.n)]
else:
re= (self.d-self.mu)/self.sd
return(np.transpose(re))
def stdard2(self, nd):
if self.n != 1:
self.nd=nd
re1=[(self.nd[i]-self.mu[i])/self.sd[i] for i in range(self.n)]
else:
re1=(self.nd-self.mu)/self.sd
return(np.transpose(re1))
#np.array 구조의 객체 각 원소의 빈도수를 계산한다.
def FreqS(obj):
idx, cnt=np.unique(obj, return_counts=True)
re=np.transpose(np.array([idx, cnt]))
return(re)
#위 함수와 유사하지만 구간의 빈도수를 계산한다. histogram() 함수를 적용
def histS(obj, n):
cnt, mu=np.histogram(obj, bins=n)
prob, mu=np.histogram(obj, bins=n, density=True)
re=np.transpose(np.array([mu[1:], cnt, prob]))
return(re)
댓글
댓글 쓰기