Keras ile Vektör verisi çalışmak


#1

Merhabalar,

Bir proje için spark üzerinden çektiğim veriyi keras ile modellemeye çalışıyorum. Ve modeli de yeniden spark üzerinden çalıştıracağım bigdl diye bir paket yardımı ile. Ancak bigdl veriyi features vektörü ve label vektörü şeklinde iki kolonmuş gibi kabul ediyor. Aynısını keras için uygulayamadım bir türlü.

ValueError: Error when checking target: expected activation_3 to shape (2, ) but got array with shape (1, )

diye hata alıyorum.

Model için yazdığım kod şu şekilde;

model = Sequential()
model.add(Dense(128, input_dim=1))
model.add(Activation("relu"))
model.add(Dropout(0.4))
model.add(Dense(2))
model.add(Activation("sigmoid")

Kullandığım veri seti 10000 satırlı normalde 67 kolonlu bir veri seti ancak ben 66 feature kolonunu bir vektöre çeviriyorum ve aslında 10000 satırlı 2 kolonlu bir veri gibi görünüyor. Gerçek veri seti 60M satırlı o yüzden onu şimdilik kullanmıyorum.

Verinin tamamı numerik ve label kolonum 0 veya 1 olabiliyor. Yani problemim ikili sınıflandırma problemi aslında.

Nasıl bir çözüm önerebilirsiniz?


#2

Merhaba;

Eğer yapay sinir ağları ile bir çalışma yapacaksanız feature extraction işlemlerini kullanarak 67 boyutlu bir veriyi 2 boyuta indirgemek çok sağlıklı sonuç vermeyecektir. 2 boyutta çok daha sağlıklı bir sınıflandırma algoritması ile ilerleyebilirsiniz.(naive_bayes, logistic regression v.s.)

Paylaşmış olduğunuz yapay sinir ağı modelinde binary classification yaptığınızdan çıktıyı aşağıdaki gibi 1 çıkış hücresinden oluşturmanız gerekmekte.
model = Sequential()
model.add(Dense(units=128, activation=‘relu’,input_dim=1))
model.add(Dropout(0.4))
model.add(Dense(units=1, activation=‘sigmoid’))

Murat


#3

aynen o hatayı fark edip düzelttim sonra da, veri boyutu çok büyük olduğu için ve işlemi big data ortamında yapmak gibi bir zorunluluk olduğu için dediğinizi yapamıyorum. yani sınıflandırma algoritmasına giremiyorum. ama sanırım orada şöyle bir şey var aslında 67 yi 2 ye indirmiyorum. 67 kolondaki verileri aralarına virgül koymuş gibi bir vektörde topluyorum. üzerlerinde PCA gibi bir matematiksel veri indirgeme olmuyor yani. ama sonuçta elimde feature vector ve label olmak üzere iki kolon görünümlü bir veri seti kalıyor. bunu da bigdl kütüphanesinin input formatı bu olduğu için yapmak zorunda kalıyorum.


#4

Merhaba,

işlemi big data ortamında yapmak gibi bir zorunluluk olduğu için dediğinizi yapamıyorum

Öncelikle big data kullanma gibi bir mecburiyetin olmamalı. Rassal olarak aldığın bir küme üzerinden de ilerleyebilirsin. Bunun yanı sıra Spark DF de çalışacaksanda zaten bu sınıflandırma algoritmalarını kolaylıkla uygulayabilirsin.

67 kolondaki verileri aralarına virgül koymuş gibi bir vektörde topluyorum

Bu kısmı çok anlayamadım. Ayrı kolonlardan yer alan verilerin birbirleriyle 1NF,2NF,3NF ilişkisi içerisinde olması gerekir. Bu kolonlar toplanması gerekiyorsa neden ayrı, toplanması gerekmiyorsa zaten PCA,LDA veya Kernel PCA gibi yöntemlerle variance göz önünde bulundurarak ilerlemeniz gerekir. Aksi taktirde sağlıklı olmayacaktır. Burada kastedilen spark input olarak verilen label kolonu ise zaten ona indirgenme demek yanlışlık olacaktır.

Murat