2017-11-16 5 views
0

집값 데이터 세트의 집값을 예측하기 위해 파이브레인을 사용하고 있습니다. '욕실', 'sqft_living', 'sqft_lot', '층', '우편 번호'신경망을 사용하는 주택 가격 예측 - 학습하지 않는 네트워크

https://www.kaggle.com/apratim87/housingdata/data

내가 가격 '침실'을 예측하는 6 열을 포착 : 나는 아래 링크에서 데이터 집합을 다운로드 나는 6 개의 입력 단위, 3 개의 뉴런을 가진 1 개의 숨겨진 층 및 출력의 1 개의 단위로 신경 네트워크를 만들었습니다.

나는 데이터를 표준화했다. 코드는 다음과 같습니다 :

house_df = pd.read_csv("kc_house_data.csv") 
print(house_df.head()) 
df = house_df.dropna(axis=0) 
df = df[(df != 0).all(1)] 
df.reset_index(drop=True,inplace=True) 
X_org=house_df[['bedrooms','bathrooms','sqft_living','sqft_lot','floors','zipcode']] 
y_org=house_df[['price']] 


scaler = Normalizer().fit(X_org) 
X = scaler.transform(X_org) 
target_scaler = preprocessing.MinMaxScaler() 
y=target_scaler.fit_transform(y_org) 

ds=SupervisedDataSet(X.shape[1],y.shape[1]) 
for i in range(len(X)): 
    ds.addSample(X.iloc[i,:].values,y.iloc[i,:].values) 

train,rest=ds.splitWithProportion(0.60) 
test,validation=rest.splitWithProportion(0.50) 

print('Training Set Size='+str(len(train))) 
print('Test Set Size='+str(len(test))) 
print('Validation Set Size='+str(len(validation))) 

#creating a neural network 
def buildNN(invar,hidden,out): 
    net=buildNetwork(invar,hidden,out,hiddenclass=SigmoidLayer,outclass=SoftmaxLayer) 
    trainer=BackpropTrainer(net,dataset=train,momentum=0.1,verbose=True,weightdecay=0.01) 
    trn_err,val_err=trainer.trainUntilConvergence(dataset=train,maxEpochs=50) 

    #trainer.trainOnDataset(trndata,500) 
    tst,=plt.plot(trn_err,'b',label='Test Error') 
    vali,=plt.plot(val_err,'r',label='Validation Error') 
    plt.legend(handles=[tst, vali]) 
    plt.ylabel('Error') 
    plt.xlabel('Number of Epochs') 
    plt.show() 
    #testing it on test data 
    out=net.activateOnDataset(test).argmax(axis=1) 
    test_error=percentError(out,test['price']) 
    #on validation data 
    out=net.activateOnDataset(validation).argmax(axis=1) 
    vali_error=percentError(out,validation['price']) 
    return test_error,vali_error 

print('Neaural network with 6 input, 3 hidden units, 1 output') 
nn3_testerr,nn3_valierr=buildNN(6,3,1) 

나는 일정한 오류가 발생하여 프로그램이 학습을하지 않습니다. 무슨 문제인지 제안 해 주시겠습니까?

총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278 총 오류 : 0.441892335278

+0

어떤 오류가 있습니까? – QHarr

+0

답변 해 주셔서 감사합니다. 상수 평균 제곱 오류가 계속 발생합니다. 네트워크가 학습하지 않습니다. – user1690117

+0

맨 아래에 전체 오류 메시지가 있습니까? 총 오류 : 0.441892335278 ..... – QHarr

답변

0

이상적으로, 당신은 두 개의 조밀 한 층과 각 층마다 많은 뉴런을 가질 필요가 있습니다. 유의해야 할 또 다른 중요한 사항은 피쳐 매트릭스의 평균 정규화입니다. Sigmoid 대신 활성화 기능으로 Relu 또는 Elu를 시도하십시오. 층) NN 성능

1 개선 조정할 지오메트리 (추가하는 방법, 변화 층 크기)

2)의 활성화 기능을 변경 많이 존재

0

3) 변경 스텝 사이즈/모멘텀

4) 데이터 전처리 함께 놀러

당신이이 모든 것을 시도하고 모두의 다양한 조합한다을 이들의. 한눈에 알 수 있듯이 세 개의 뉴런 만있는 단일 레이어는 매우 튼튼하지 않으므로 거기에서 시작하십시오.

이 네트워크를 xor 같은 간단한 예제로 수렴 할 수 있습니까?