CountVectorizer’in Çalışma Şekli


Python’da Metin Madenciliğine dayalı makine öğrenme modelleri kullanırken doküman külliyatınızı (corpus) kelime kelime sayılara (numpy.array formatında) çevirmek için CountVectorizer nesnesini kullanabiliyorsunuz. Çalışma şekli aşağıda:In [43]:

from sklearn.feature_extraction.text import CountVectorizer

a=["gel ali","gel suat","ali atan","suat atan"]

In [44]:

vec = CountVectorizer(max_features=10, min_df=2, max_df=10)  
X = vec.fit_transform(a)
print(X.toarray())
print(vec.vocabulary_)
[[1 0 1 0]
 [0 0 1 1]
 [1 1 0 0]
 [0 1 0 1]]
{'gel': 2, 'ali': 0, 'suat': 3, 'atan': 1}

In [54]:

new_sentence = "gel ali"
mapped_a = vec.transform([new_sentence])
print(mapped_a.toarray()) # sparse feature vector
print(vec.vocabulary_)
[[1 0 1 0]]
{'gel': 2, 'ali': 0, 'suat': 3, 'atan': 1}

In [55]:

new_sentence = "sen ali"
mapped_a = vec.transform([new_sentence])
print(mapped_a.toarray()) # sparse feature vector
print(vec.vocabulary_)
[[1 0 0 0]]
{'gel': 2, 'ali': 0, 'suat': 3, 'atan': 1}

Tahmin Yaparken Yeni Gelen Söz Dizisini Vektörize Etmek

“hakan gel” ifadesi külliyatınızda birebir yok sadece ‘gel’ ifadesi eşleşmekte. Bu diziyi vektörize edince corpus’ta ‘gülnur’ olmadığından matriste değer sıfır çıkacaktır.In [59]:

new_sentence = "hakan gel"
mapped_a = vec.transform([new_sentence])
print(mapped_a.toarray()) # sparse feature vector
print(vec.vocabulary_)
[[0 0 1 0]]
{'gel': 2, 'ali': 0, 'suat': 3, 'atan': 1}

In [60]:

tokenizer = vec.build_tokenizer()
# array of words ids
for token in tokenizer(new_sentence):
    print(vec.vocabulary_.get(token))
None
2
Reklamlar

Makalenizi Yollamadan Önce Bir Daha Düşünün. Dergi “malum” Listede mi?


Belki de en olmaması gereken yer olan akademide bile bir takım dergilerin çevirdiği “karanlık” işler var. Bunu öğrenmek için şu yazıyı öneriyorum: http://uvt.ulakbim.gov.tr/tip/sempozyum11/Sayfa-47-49.pdf

Öte yandan bu dergilerin listesini tutan Beall adlı bir liste var:

https://beallslist.weebly.com/#

Bu listeye Türkiyeden giren dergilerle ilgili olarak da şu yazıyı öneriyorum:

http://bd.org.tr/index.php/bd/article/view/695

Malthus Popülasyon Yasası Bir Örnek ve R Dili ile Modelleme (Adi Diferansiyel Denklemle)


Sistem dinamiklerinde ‘stocks’ olarak anılan her bir düğüm artış ve azalışa hazir olan bir olgudan başka bir şey değildir. Örneğin stock nüfus olduğunda nüfus için ‘inflow’ doğumlar, ‘outflow’ ölümlerdir. Amaç diyelim ki bugün nüfusunu bildiğimiz bir yerde 10 sene sonraki nüfusu hesaplamaktır. Bu hesaplama yapılırken elbette elimizde nüfusun nasıl artacağına dair bir fonksiyon olmalıdır. Bu fonksiyon literatürden veya uzmanlıktan gelen bir fonksiyon olabilir.

Girdilerimiz 1970 yılındaki nüfus: 3.7 milyar, artış oranımız: 0.01801. Başka bir şey yok. aux parametremize artış oranını, 1970 yılındaki nüfüsu sCustomers değişkenimize atadık. START<-1970; FINISH<-2008; STEP<-0.25 zaten kendi kendini açıklıyor. Daha sonra her yıl çeyreklik bazda (step) nüfus artışını ve grafikleri ortaya çıkarıyoruz.

Sistem dinamikleri elbette bundan ibaret değil. Malthus modeli gibi modellerin çıktılarını başka bir modele örneğin artan nüfusa göre gıda ihtiyacı fonksiyonuna bağlayarak fonkisyonlardan oluşan bir network yaratarak simülasyonlar yapıyoruz.

Malthus fonksiyonunun matematiksel gösterimi ve çözümü için şuraya bakabilirsin: https://math.stackexchange.com/questions/345242/differential-equation-word-problem-malthuss-law

Modeli Tasarlama

library(deSolve)
library(ggplot2)
require(gridExtra)
library(scales)

# Setup simulation times and time step
START<-1970; FINISH<-2008; STEP<-0.25

# Create time vector
simtime <- seq(START, FINISH, by=STEP)

Kademeli olarak çeyreklik bazda (0.25) yılları arttırdık

simtime
##   [1] 1970.00 1970.25 1970.50 1970.75 1971.00 1971.25 1971.50 1971.75
##   [9] 1972.00 1972.25 1972.50 1972.75 1973.00 1973.25 1973.50 1973.75
##  [17] 1974.00 1974.25 1974.50 1974.75 1975.00 1975.25 1975.50 1975.75
##  [25] 1976.00 1976.25 1976.50 1976.75 1977.00 1977.25 1977.50 1977.75
##  [33] 1978.00 1978.25 1978.50 1978.75 1979.00 1979.25 1979.50 1979.75
##  [41] 1980.00 1980.25 1980.50 1980.75 1981.00 1981.25 1981.50 1981.75
##  [49] 1982.00 1982.25 1982.50 1982.75 1983.00 1983.25 1983.50 1983.75
##  [57] 1984.00 1984.25 1984.50 1984.75 1985.00 1985.25 1985.50 1985.75
##  [65] 1986.00 1986.25 1986.50 1986.75 1987.00 1987.25 1987.50 1987.75
##  [73] 1988.00 1988.25 1988.50 1988.75 1989.00 1989.25 1989.50 1989.75
##  [81] 1990.00 1990.25 1990.50 1990.75 1991.00 1991.25 1991.50 1991.75
##  [89] 1992.00 1992.25 1992.50 1992.75 1993.00 1993.25 1993.50 1993.75
##  [97] 1994.00 1994.25 1994.50 1994.75 1995.00 1995.25 1995.50 1995.75
## [105] 1996.00 1996.25 1996.50 1996.75 1997.00 1997.25 1997.50 1997.75
## [113] 1998.00 1998.25 1998.50 1998.75 1999.00 1999.25 1999.50 1999.75
## [121] 2000.00 2000.25 2000.50 2000.75 2001.00 2001.25 2001.50 2001.75
## [129] 2002.00 2002.25 2002.50 2002.75 2003.00 2003.25 2003.50 2003.75
## [137] 2004.00 2004.25 2004.50 2004.75 2005.00 2005.25 2005.50 2005.75
## [145] 2006.00 2006.25 2006.50 2006.75 2007.00 2007.25 2007.50 2007.75
## [153] 2008.00
#Stock ve Aux değerlerini atadık. Müşteri sayısı 10.000
# Create stock and auxs
stocks  <- c(sCustomers=3712000000)
auxs    <- c(aGrowthFraction=0.018021)

Model basit bir fonksiyondur.

# Model function
model <- function(time, stocks, auxs){
  with(as.list(c(stocks, auxs)),{ 
    #Denklem: fRecruits işe değerimiz müşteri sayısı ile artış katsayısı
    #çarpımı kadardır
    fRecruits<-sCustomers*aGrowthFraction
    # Inflow
    dC_dt <- fRecruits
    return (list(c(dC_dt),
                 Recruits=fRecruits,
            GF=aGrowthFraction))   
  })
}
# Modeli ve değerleri Düzenli Difereansiyel Denkleme Sokalım
# Run simulation
o<-data.frame(ode(y=stocks, times=simtime, func = model, 
                  parms=auxs, method="euler"))

Model Sonuçları

Her yıl olacak işe alım ve kayıplar hesaplandı:

time<dbl>sCustomers<dbl>Recruits<dbl>GF<dbl>
1970.003712000000668939520.018021
1970.253728723488671953260.018021
1970.503745522319674980580.018021
1970.753762396834678021530.018021
1971.003779347372681076190.018021
1971.253796374277684144610.018021
1971.503813477892687226850.018021
1971.753830658563690322980.018021
1972.003847916638693433060.018021
1972.253865252464696557150.018021

Next12345616Previous1-10 of 153 rows

Modeli Görselleştirme

p1<-ggplot()+
  geom_line(data=o,aes(time,o$sCustomers,color="Customers"))+
  scale_y_continuous(labels = comma)+
  ylab("Stock")+
  xlab("Year") +
  labs(color="")+
  theme(legend.position="none")
p1

Görsel 1: Yıllara göre nüfusun artışı

What is Your Life Like A Way or A Corridor?


corridor image ile ilgili görsel sonucu

The metaphors which we select to use when we explain something sometimes limits our capacity of envisioning instead of expanding it. Because metaphors are artificial simulations of complex life. It is kind of map of reality we understand. On the maps, the things are shown not by their real colors, distances or shapes. Therefore they are not real.

Typically we use the “way” metaphor when we define our lives. It starts from a point to another and there is a line which reflects progress or time. When we want to define there are two options we draw the fork. These drawings may be fancy by not reflects the real aspects of life.

A way or corridor?

Instead, we can use the corridor metaphor. A corridor is way too but what corridor distinct from a way is the doors along. A corridor has a lot of door in two sides. These doors may be closed or opened. Maybe locked or unlıocked. Some of them can be opened by knocking some of them not. Some of them are relevant to us some of them not.

The corridors have intersections. There is a lot of intersection of corridors in our life. This intersection is another’s life. You can get in or continue to your life. Some of the corridors intersect in somewhere else again. Some of them are parallel. They go the same direction but never intersects. You may be friend with someone else in the parallel corridor. The old cuneiform reflects friend two parallel lines.

The symbol of friend in cunneiform.

The way of some person will intersect with your life but you will fight with them. Old cuneiform alphabet the intercepted lines reflects enemy.


The symbol of enemy in cunneiform.

However, the corridor reflects possibilities and opportunities more than simple way metaphor. The most of way is just one or two-sided mountain, forest, des sea or land not the opportunities.

If you want to understand the door is open. The only way is knocking it as Montaigne once said.

Dr. Suat ATAN

2018’de okuduklarım


Bu kitaplardan bazıları ile ilgili aldığım notlar:

https://suatatan.wordpress.com/2018/12/13/negatif-dusunceler-hayatta-kalmak-icindir-takilmak-icin-degil/

https://suatatan.wordpress.com/2018/12/12/yaklasirken-hizli-uzaklasirken-yavasiz/

https://suatatan.wordpress.com/2018/12/02/etkilenen-zihnimiz/

https://suatatan.wordpress.com/2018/05/04/pozitif-olmak-zorunda-miyiz/

2017 de neler okumuştum:

https://suatatan.wordpress.com/2017/12/25/2017de-neler-okudum/

Negatif Düşünceler Hayatta Kalmak içindir Takılmak için Değil !


Bugün dinlediğim bir ses kaydında Tomek adlı hoca bilimsel çalışmaların düşüncelerimizin neredeyse tamamına yakının tekrar eden düşüncelerden oluştuğunu ve bu düşüncelerin genellikle beyinlerimizin hayatta kalmaya programlanmış olmaları nedeniyle negatif obsesyonlar olduğunu söyledi.

Negatif düşünceler bizi hayatta tutmaya yardım ediyor. Eğer Afrika’da yaşayıp aslanlardan korkmadan yaşarsak büyük ihtimalle pek de yaşamayacaktık. Beynimiz negatif düşünceler için yapışkan bir tava iken, pozitif düşünceler için teflon tava gibi.

Pozitif düşüncelere dair obsesyonumuz hiç olmuyor. Peki negatif düşüncelere mahkum muyuz. Elbette değil… Yöntem ? Negatif düşüncelerle savaşmak onları daha güçlü kılıyor. Unutmaya çalışmak için dikkat dağıtarak başka bir şeyle ilgilenmek (sıkça yaparız, gider bir sigara içer -ben içmiyorum-, ya da bir şeyler atıştırırız, ya da deli gibi çalışırız) ise pek sağlıklı olmayan sonuçlar doğurabiliyor. Yöntem onları kabul etmek. Mevlana’nın dediği gibi içeriye gönül köşkümüze buyur etmek. Öyle ki onlar misafir oldukları köşkten çıktıklarında iyi karşılanmadık demesinler. Negatif düşünceleri kabul etmek hatta özellikle serbestçe gözlemlek faydalı olabiliyor. Tomek hocanın önerisi uzak doğu meditasyonlarında sıkça kullanılan bir yöntemin yeni ve başarılı bir uyarlaması.

Bir nehrin kenarında oturuyorsunuz. Bu nehirden sürekli olarak kayıklar geçiyor. Bu kayıklar sizin düşünceleriniz. Bazı kayıklara bilmeden binip onun sizi alıp götürmesine izin verdiğiniz zamanlar olacak. Bunlar genelde negatif obsesif düşünceler. İşte bunu fark ettiğiniz anda inin ve kenara oturup suların akışının devam etmesini izlemeye devam edin. Ben kendimce bu kayıklara renkler vermiştim. Hatırlaya hatırlaya sararttığım negatif düşünceler kayıkları, yeni düşüncelerin beyaz kayıkları, düşünmeye tahammül edemediğim kırmızı kayıklar ve nadiren de gelse güzel şeylere dair mavi kayıklar. Bu kayıkların her herngi gelip geçiyor, hem de defalarca. Bir süre sonra kayıklar azalıyor ve siz harika bilişsel nehrinizin dibindeki güneşten parıldayan taşları görüyorsunuz.