Anasayfa / Makine Öğrenmesi (Machine Learning) / Support Vector Machine (SVM)ile Sınıflandırma: R Örnek Uygulaması

Support Vector Machine (SVM)ile Sınıflandırma: R Örnek Uygulaması

Bu yazıda Sınıflandırma Python ile yaptığımız uygulamanın aynısını R ile yapacağız.

Öncelikle çalışma dizinin ayarlayalım:

setwd('Calisma_dizini')

Veri setini yükleyelim. Veri setini buradan indirebilirsiniz.

dataset = read.csv('SosyalMedyaReklamKampanyası.csv', encoding = 'UTF-8')

Türkçe karakterlerin düzgün okunması için encoding parametresini kullandık. Lazım olan sütunları seçelim.

dataset = dataset[3:5]

Veri Setini Eğitim ve Test Olarak Ayırmak

Aynı sonuçları almak için random değeri belirlemek için bir sayı belirliyoruz. 123. split fonksiyonu ile hangi kayıtların eğitim hangi kayıtların test grubunda kalacağını damgalıyoruz. Sonra bu damgalara göre ana veri setinden yeni eğitim ve test setlerini oluşturuyoruz.

libraryt(caTools)
set.seed(123)
split = sample.split(dataset$SatinAldiMi, SplitRatio = 0.75)
training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)

Yaş ile maaş aynı ölçekte olmadığı için bu nitelikleri normalizasyona tabi tutuyoruz.

training_set[-3] = scale(training_set[-3])
test_set[-3] = scale(test_set[-3])

Modeli eğitelim:

library(e1071)
classifier = svm(formula = SatinAldiMi ~ ., data=training_set, type='C-classification', kernel='linear')

Eğittiğimiz modelde test seti ile tahmin setimizi (y_pred) oluşturalım.

y_pred = predict(classifier, newdata = test_set[-3])

Hata matrisini (confusion matrix) oluşturalım:

cm = table(test_set[, 3], y_pred)
   y_pred
   0 1
0 57 7
1 13 23

Durum kötü görünüyor. 20 isabetsiz tahmin var. Bir de grafik ile bakalım.

library(ElemStatLearn)
set = training_set
X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01)
X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01)
grid_set = expand.grid(X1, X2)
colnames(grid_set) = c('Yas', 'TahminiMaas')
y_grid = predict(classifier, newdata = grid_set)
plot(set[, -3],
     main = 'SVM (Eğitim Seti)',
     xlab = 'Yas', ylab = 'TahminiMaas',
     xlim = range(X1), ylim = range(X2))
contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE)
points(grid_set, pch = '.', col = ifelse(y_grid == 1, 'springgreen3', 'tomato'))
points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))


Test setini de görelim:

library(ElemStatLearn)
set = test_set
X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01)
X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01)
grid_set = expand.grid(X1, X2)
colnames(grid_set) = c('Yas', 'TahminiMaas')
y_grid = predict(classifier, newdata = grid_set)
plot(set[, -3], main = 'SVM (Test seti)',
     xlab = 'Yas', ylab = 'TahminiMaas',
     xlim = range(X1), ylim = range(X2))
contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE)
points(grid_set, pch = '.', col = ifelse(y_grid == 1, 'springgreen3', 'tomato'))
points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))

Grafikte gördüğümüz gibi kırmızı bölgeye taşan yeşil noktalar ile yeşil bölgeye taşan kırmızı noktalar hep başarısız sınıflandırmayı gösteriyor.

Hakkında Erkan ŞİRİN

2014'ten beri hem akademik alanda hem de sektörde pratik anlamda büyük veri ve veri bilimi ile ilgili çalışmalar yürütmektedir. Halihazırda İmpektra Bilişim A.Ş.'de büyük veri yöneticisi olarak çalışmakta olup aynı zamanda Gazi Üniversitesi Yönetim Bilişim Sistemleri doktora öğrencisidir. Büyük veri ve veri bilimi ile ilgili birçok kurum ve şirkete eğitimler vermekte ve projeler icra etmektedir. Çalışma alanları: büyük veri platformlarının kurulum ve yönetimi, büyük veri üzerinde makine öğrenmesi, olağan dışılık tespiti, sahtecilik tespiti, veri hazırlama sürecidir.

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Cv2 İle Yüz Tanıma ve Belirleme

Yüz belirleme ya da nesne tanıma, derin öğrenmenin gelişmesi ve ciddi çalışmaların literatüre katılmasıyla son …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir