خانه / مقالات / داده کاوی و هوش مصنوعی / classification با استفاده از الگوریتم SVM در R

classification با استفاده از الگوریتم SVM در R

classification با استفاده از الگوریتم SVM در R
در مقاله های پیشین به بررسی دسته بندی دیتا با استفاده ازالگوریتم SVM در نرم افزارهای وکا، رپیدماینر و متلب پرداختیم در این مقاله قصد داریم این الگوریتم را در نرم افزار R بررسی کنیم.

دیتاست گل ذنبق شامل سه class label است :” Iris setosa” ، ” Iris virginica ” و ” Iris versicolor ” برای به کار گیری استراتژی کلاسیفیکیشن one-against-one با svm می توان سه کلاسیفایر باینری را آموزش داد.
اولین ست آموزشی کلاسیفایر شامل نمونه های Iris setosa و Iris virginica است. دومین ست شامل Iris setosa و Iris versicolor است. سومین ست شامل Iris virginica و Iris versicolor است.
برای کلاسیفای کردن یک نمونه ناشناخته باید هر سه کلاسیفایر را به کار برد. در این حالت یک استراتژی رای گیری می تواند class lable ای که بیشتر استفاده شده را پیدا کند. برای هر class label می تواند از رتبه svm confidence هم استفاده کرد.
در اینجا ابتدا از svm برای آموزش ماشین بردار پشتیبان استفاده می شود. که می توان از آن برای اجرای regression و classification استفاده کرد(of nu and epsilon-type). می توان تخمین چگالی نیز انجام داد.
برای multiclass-classification با k سطح (k>2)، libsvm همان طور که در بالا گفته شد از رویکرد one-against-one استفاده می کند که در آن k(k-1)/2 کلاسیفایر باینری آموزش داده می شود و کلاس مناسب را با رای گیری می توان پیدا کرد. plot.svm یک شما از مدل های کلاسیفیکیشن نمایش می دهد.
مدل احتمالاتی classification با استفاده از بیشتری احتمال decision value های همه کلاسیفایرهای باینری به یک توزیع منطقی می رسد و احتمال a-posteriori کلاس را برای مسائلی با بیش از دو کلاس با استفاده از بهینه سازی quadratic بدست می آورد. مدل رگرسیون احتمالاتی (zero-mean) laplace-distributed errors را برای پیش بینی استفاده می کند و پارامترها را با استفاده از maximum likelihood به دست می آورد.
در کد زیر X ماتریس داده ها ، یک بردار یا یک ماتریس اسپارس است (شی ای از کلاس Matrix که در پکیج Matrix ارائه شده یا از کلاس matrix.csr که توسط پکیج SparseM ارائه می شود یا از کلاس simple_triplet_matrix که در پکیج slam ارائه شده این پکیج ها در R وجود دارند و نیازی به نصب آنها نیست. y یک بردار پاسخ با یک برچسب برای هر سطر یا کامپوننت از x است. می تواند عاملی برای کلاسیفیکیشن باشد یا یک بردار عددی برای رگرسیون. Scale یک بردار منطقی است که نشان دهنده متغیرهایی است که باید scale شوند. اگر طول آن ۱ باشد مقدار هرتعداد مرتبه ای که لازم باشد recycle می شود. معمولا بصورت پیش فرض داده (متغیرهای x و y) به zero mean و واریانس واحد اسکیل می شوند. مرکز و مقادیر اسکیل برای پیش بینی های بعدی استفاده می شوند.
انواع SVM
• C-classification
• nu-classification
• one-classification
• eps-regression
• nu-regression
کرنل svm:
کرنلهای مورد استفاده در آموزش و پیش بینی. برای استفاده از این کرنل ها باید یک سری پارامترها را مقدار دهی کرد و تغییر داد تا به نتیجه رسید که این پارامترها بسته به نوع کرنل مورد استفاده دارند. در زیر کرنل های ماشین بردار پشتیبان و فرمول های مربوط به آنها آورده شده:

linear: u’*v
polynomial: (gamma*u’*v + coef0)^degree
radial basis: exp(-gamma*|u-v|^2)
sigmoid: tanh(gamma*u’*v + coef0)

degree پارامتری است که برای کرنل چند جمله ای استفاده می شود و مفدار پیش فرض آن ۳ است. gama پارامتری است که برای همه کرنل ها به جز کرنل خطی لازم است و مقدار پیش فرض آن ۱ است. coef0 پارامتری است که برای کرنل های چندجمله ای و سیگموید مورد نیاز است و پیش فرض آن ۰ است. nu پارامتر مورد نیاز برای nu-classification و nu-regression و one-classification است. class.weights برداری از وزن ها برای کلاس های مختلف است که برای کلاسهای با اندازه نامتقارن استفاده می شود. وزن پیش فرض ۱ است. همه کامپوننت ها باید نام گذاری شوند. epsilon در تابع insensitive-loss که پیش فرض آن ۰٫۱ است. subset بردار شاخصی برای مشخص کردن مواردی است که در نمونه های آموزشی مورد استفاده قرار می گیرند.
SV ماشین بردار پشتیبان حاصل است. index شاخص بردارهای پشتیبان حاصل در ماتریس داده ها است این ایندکس به داده های پیش پردازش شده پس از تاثیر احتمالی na.omit و subset اشاره دارد. در صورت استفاده از مدل رگرسیون احتمالاتی، پارامتر اسکیل توزیع لاپلاس تخمین زده شده با ماکزمم احتمال sigma است. probA و probB بردارهای عددی به طول k(k-1)/2 است که k تعداد کلاس ها است که شامل پارامترهای منطقی مناسب با decision value های کلاسیفایرهای باینری است (۱ / (۱ + exp(a x + b))).

فراخوانی دیتاست iris و اجرای svm:

data(iris)
attach(iris)

## classification mode
# default with factor response:
model <- svm(Species ~ ., data = iris)

# alternatively the traditional interface:
x <- subset(iris, select = -Species)
y <- Species
model <- svm(x, y)

print(model)
خروجی
>
> data(iris)
> attach(iris)
The following objects are masked from iris (pos = 3):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 5):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 6):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 7):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 9):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 11):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 12):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 13):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 14):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 15):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

The following objects are masked from iris (pos = 17):

Petal.Length, Petal.Width, Sepal.Length, Sepal.Width, Species

>
> ## classification mode
> # default with factor response:
> model <- svm(Species ~ ., data = iris)
>
> # alternatively the traditional interface:
> x <- subset(iris, select = -Species)
> y <- Species
> model <- svm(x, y)
>
> print(model)

Call:
svm.default(x = x, y = y)
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25

Number of Support Vectors: 51

بخش بعدی
summary(model)

خروجی
> summary(model)

Call:
svm.default(x = x, y = y)
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25

Number of Support Vectors: 51

( ۸ ۲۲ ۲۱ )
Number of Classes: 3

Levels:
setosa versicolor virginica

بخش بعدی

# test with train data
pred <- predict(model, x)
# (same as:)
pred <- fitted(model)

# Check accuracy:
table(pred, y)

خروجی
بخشی بعدی

# compute decision values and probabilities:
pred <- predict(model, x, decision.values = TRUE)
attr(pred, “decision.values”)[1:4,]

خروجی

بخش بعدی
# visualize (classes by color, SV by crosses):
plot(cmdscale(dist(iris[,-5])),
col = as.integer(iris[,5]),
pch = c(“o”,”+”)[1:150 %in% model$index + 1])
خروجی

REGRESSION MODE:

## try regression mode on two dimensions

# create data
x <- seq(0.1, 5, by = 0.05)
y <- log(x) + rnorm(x, sd = 0.2)

# estimate model and predict input values
m <- svm(x, y)
new <- predict(m, x)

# visualize
plot(x, y)
points(x, log(x), col = 2)
points(x, new, col = 4)

## density-estimation

# create 2-dim. normal with rho=0:
X <- data.frame(a = rnorm(1000), b = rnorm(1000))
attach(X)
خروجی

# traditional way:
m <- svm(X, gamma = 0.1)

# formula interface:
m <- svm(~., data = X, gamma = 0.1)
# or:
m <- svm(~ a + b, gamma = 0.1)

# test:
newdata <- data.frame(a = c(0, 4), b = c(0, 4))
predict (m, newdata)

# visualize:
plot(X, col = 1:1000 %in% m$index + 1, xlim = c(-5,5), ylim=c(-5,5))
points(newdata, pch = “+”, col = 2, cex = 5)

# weights: (example not particularly sensible)
i2 <- iris
levels(i2$Species)[3] <- “versicolor”
summary(i2$Species)
wts <- 100 / table(i2$Species)
wts
m <- svm(Species ~ ., data = i2, class.weights = wts)

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

x

شاید بپسندید

DNA، یک فضای ذخیره سازی همیشگی برای بشر

یافته های جدید علمی در دنیای فناوری— در دوران فضا های ذخیره ...