2017-11-30 8 views
2

MacOSでPython3.6を使用して単純なKerasモデルを構築して、指定された範囲の住宅価格を予測しようとしていますが、マトリックス。私はKaggleからthis datasetを使用しています。KerasとSklearnを使用して文字列をカテゴリ行列に変換できない

私はモデル内の目標出力として役立つ異なる価格帯のデータフレームで新しい列を作成した後、keras.utilsとSklearn LabelEncoderを使用して出力バイナリ行列を作成しようとしていますが、エラー:ここ

ValueError: invalid literal for int() with base 10: '0 - 50000' 

が私のコードです:私は次のピースを実行するまで

import pandas as pd 
import numpy as np 
from keras.layers import Dense 
from keras.models import Sequential, load_model 
from keras.callbacks import EarlyStopping 
from keras.utils import to_categorical, np_utils 
import matplotlib.pyplot as plt 
from sklearn.preprocessing import LabelEncoder 

seed = 7 
np.random.seed(seed) 

data = pd.read_csv("Melbourne_housing_FULL.csv") 
data.fillna(0, inplace=True) 

price_range = 50000 
bins = np.arange(0, 12000000, price_range) 
labels = ['{} - {}'.format(i + 1, j) for i, j in zip(bins[:-1], bins[1:])] 

#correct first value 
labels[0] = '0 - 50000' 

for item in labels: 
    str(item) 

print (labels[:10]) 
['0 - 50000', '50001 - 100000', '100001 - 150000', '150001 - 200000', 
'200001 - 250000', '250001 - 300000', '300001 - 350000', '350001 - 400000', 
'400001 - 450000', '450001 - 500000'] 

data['PriceRange'] = pd.cut(data.Price, 
          bins=bins, 
          labels=labels, 
          right=True, 
          include_lowest=True) 

#print(data.PriceRange.value_counts()) 
output_len = len(labels) 
print(output_len) 

すべてはここに正しいです:

predictors = data.drop(['Suburb', 'Address', 'SellerG', 'CouncilArea', 
         'Propertycount', 'Date', 'Type', 'Price', 'PriceRange'], axis=1).as_matrix() 

target = data['PriceRange'] 


# encode class values as integers 
encoder = LabelEncoder() 
encoder.fit(target) 
encoded_Y = encoder.transform(target) 

target = np_utils.to_categorical(data.PriceRange) 

n_cols = predictors.shape[1] 

ValueError:基数10のint()の無効なリテラル: '0 - 50000'

ここで私を助けてください?私が間違っていることを本当に理解していない。

感謝

+0

あなたは今投票に参加できますか? – Dark

+0

こんにちは、私はここで新しいです、私は今投票しましたか?ありがとう!最初のアプローチ(インデックスの作成)を使用していますが、ターゲットが多次元配列かどうかはわかりません(はい、私は初心者です)。これは重要です。なぜなら、私がマルチ分類ネットを構築すべきかどうかを判断しようとしているからです。 また、戻ってくるのが遅れて申し訳ありません。私は旅行しており、数日でインターネットに接続されていません。再度、感謝します! –

+0

'Target.shape'をチェックしてください。2つ以上の値のタプルが多次元である場合は – Dark

答えて

3

そのnp_utils.to_categoricalはデータ型intのyはかかりますが、あなたは彼らにキーすなわち与えることによってint型に変換のいずれかの文字列を持っている理由は次のとおりです。

cats = data.PriceRange.values.categories 
di = dict(zip(cats,np.arange(len(cats)))) 
#{'0 - 50000': 0, 
# '10000001 - 10050000': 200, 
# '1000001 - 1050000': 20, 
# '100001 - 150000': 2, 
# '10050001 - 10100000': 201, 
# '10100001 - 10150000': 202, 

target = np_utils.to_categorical(data.PriceRange.map(di)) 

か、パンダを使用しているので、あなたができるの1つのホットエンコーディングを取得するにはpd.get_dummiesを使用してください。

onehot = pd.get_dummies(data.PriceRange) 
target_labels = onehot.columns 
target = onehot.as_matrix() 

array([[ 1., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     ..., 
     [ 0., 0., 0., ..., 0., 0., 0.], 
     [ 1., 0., 0., ..., 0., 0., 0.], 
     [ 0., 0., 0., ..., 0., 0., 0.]]) 
関連する問題