सांख्यिकीय लर्निंग के तत्वों का व्यायाम 2.2


10

पाठ्य पुस्तक पहले 2-श्रेणी के डेटा के माध्यम से उत्पन्न करती है:

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

जो देता है:

यहाँ छवि विवरण दर्ज करें

और फिर यह पूछता है:

यहाँ छवि विवरण दर्ज करें

मैं इसे इस चित्रमय मॉडल के साथ पहले मॉडलिंग द्वारा हल करने की कोशिश करता हूं:

यहाँ छवि विवरण दर्ज करें

जहाँ लेबल है, चयनित माध्य का सूचकांक है , और डेटा बिंदु है। यह देगाch(1h10)mhcx

पीआर(एक्स|सी)=एन(सी,मैं/5)पीआर(सी|,सी=एलयू)=एन((1,0)टी,मैं)पीआर(सी|,सी=आरnजी)=एन((0,1)टी,मैं)पीआर()=110पीआर(सी)=12

दूसरी ओर, सीमा । बायेसियन शासन के साथ, हमारे पास है{एक्स:पीआर(सी=एलयू|एक्स)=पीआर(सी=आरnजी|एक्स)}

पीआर(सी|एक्स)=पीआर(एक्स|सी)पीआर(सी)Σसीपीआर(एक्स|सी)पीआर(सी)पीआर(एक्स|सी)=Σसीपीआर()पीआर(सी|,सी)पीआर(एक्स|सी)

लेकिन बाद में मैंने पाया कि समस्या सेटिंग सममित है इसलिए यह सीमा के रूप में प्राप्त कर सकता है । यदि समस्या यह पूछती है कि सीमा कब वातानुकूलित है, तो समीकरण में पैरामीटर शामिल होंगे जो मुझे लगता है कि यह अभ्यास का उद्देश्य होने की संभावना नहीं है।एक्स=yसी40

तो क्या मुझे कोई गलतफहमी है? धन्यवाद।

जवाबों:


8

मुझे नहीं लगता कि आप दिए गए अहसास के लिए, बेयस निर्णय सीमा के लिए एक विश्लेषणात्मक अभिव्यक्ति खोजने वाले हैं । इसी तरह मुझे संदेह है कि आप के वितरण पर सीमा प्राप्त करने वाले हैं , क्योंकि आपके द्वारा बताए अनुसार समरूपता से सिर्फ है।एक्स=y

मुझे लगता है कि आपको जो दिखाने की ज़रूरत है वह एक ऐसा कार्यक्रम है जो दिए गए अहसास के लिए निर्णय सीमा की गणना कर सकता है । यह और मानों की एक ग्रिड स्थापित करके किया जा सकता है , वर्ग-सशर्त घनत्वों की गणना कर सकते हैं, और उन बिंदुओं को खोज सकते हैं जहां वे समान हैं।एक्सy

यह कोड इस पर एक छुरा है। IIRC वास्तव में S के साथ मॉडर्न एप्लाइड स्टैटिस्टिक्स में निर्णय सीमा की गणना करने के लिए कोड है , लेकिन मुझे अभी वह काम नहीं मिला है।

# for dmvnorm/rmvnorm: multivariate normal distribution
library(mvtnorm)

# class-conditional density given mixture centers
f <- function(x, m)
{
    out <- numeric(nrow(x))
    for(i in seq_len(nrow(m)))
        out <- out + dmvnorm(x, m[i, ], diag(0.2, 2))
    out
}

# generate the class mixture centers
m1 <- rmvnorm(10, c(1,0), diag(2))
m2 <- rmvnorm(10, c(0,1), diag(2))
# and plot them
plot(m1, xlim=c(-2, 3), ylim=c(-2, 3), col="blue")
points(m2, col="red")

# display contours of the class-conditional densities
dens <- local({
    x <- y <- seq(-3, 4, len=701)
    f1 <- outer(x, y, function(x, y) f(cbind(x, y), m1))
    f2 <- outer(x, y, function(x, y) f(cbind(x, y), m2))
    list(x=x, y=y, f1=f1, f2=f2)
})

contour(dens$x, dens$y, dens$f1, col="lightblue", lty=2, levels=seq(.3, 3, len=10),
        labels="", add=TRUE)

contour(dens$x, dens$y, dens$f2, col="pink", lty=2, levels=seq(.3, 3, len=10),
        labels="", add=TRUE)

# find which points are on the Bayes decision boundary
eq <- local({
    f1 <- dens$f1
    f2 <- dens$f2
    pts <- seq(-3, 4, len=701)
    eq <- which(abs((dens$f1 - dens$f2)/(dens$f1 + dens$f2)) < 5e-3, arr.ind=TRUE)
    eq[,1] <- pts[eq[,1]]
    eq[,2] <- pts[eq[,2]]
    eq
})
points(eq, pch=16, cex=0.5, col="grey")


परिणाम:

यहाँ छवि विवरण दर्ज करें


3

वास्तव में, किताब है इस समस्या का एक विश्लेषणात्मक समाधान देने के लिए कहा। और हां, आपको सीमा की शर्त लगानी होगी, लेकिन 40 के साधन पर नहीं: आपको उनका ठीक-ठीक पता नहीं है। इसके बजाय आपको उन 200 डेटा बिंदुओं पर शर्त लगानी होगी जो आपको देखने को मिलते हैं। तो आपको 200 मापदंडों की आवश्यकता होगी, लेकिन समन के उपयोग के कारण, उत्तर बहुत जटिल नहीं लगता है।

मैं कभी भी इस सूत्र को प्राप्त नहीं कर पाऊंगा, इसलिए मैं केवल यह महसूस करने का श्रेय लेता हूं कि विश्लेषणात्मक समाधान को बदसूरत होना नहीं है और फिर इसे Google पर खोजना है। सौभाग्य से, यह लेखकों द्वारा कुछ अच्छे लोगों द्वारा प्रदान किया जाता है , पृष्ठ 6-7


2

काश मैं पहले प्रति ऊपर कोड पर ठोकर खाई; बस फ़ाइनसेड नीचे कुछ वैकल्पिक कोड बना रहा है ... इसके लायक क्या है

set.seed(1)
library(MASS)

#create original 10 center points/means for each class 
I.mat=diag(2)
mu1=c(1,0);mu2=c(0,1)
mv.dist1=mvrnorm(n = 10, mu1, I.mat)
mv.dist2=mvrnorm(n = 10, mu2, I.mat)

values1=NULL;values2=NULL

#create 100 observations for each class, after random sampling of a center point, based on an assumed bivariate probability distribution around each center point  
for(i in 1:10){
  mv.values1=mv.dist1[sample(nrow(mv.dist1),size=1,replace=TRUE),]
  sub.mv.dist1=mvrnorm(n = 10, mv.values1, I.mat/5)
  values1=rbind(sub.mv.dist1,values1)
}
values1

#similar as per above, for second class
for(i in 1:10){
  mv.values2=mv.dist2[sample(nrow(mv.dist2),size=1,replace=TRUE),]
  sub.mv.dist2=mvrnorm(n = 10, mv.values2, I.mat/5)
  values2=rbind(sub.mv.dist2,values2)
}
values2

#did not find probability function in MASS, so used mnormt
library(mnormt)

#create grid of points
grid.vector1=seq(-2,2,0.1)
grid.vector2=seq(-2,2,0.1)
length(grid.vector1)*length(grid.vector2)
grid=expand.grid(grid.vector1,grid.vector2)



#calculate density for each point on grid for each of the 100 multivariates distributions
prob.1=matrix(0:0,nrow=1681,ncol=10) #initialize grid
for (i in 1:1681){
  for (j in 1:10){
    prob.1[i,j]=dmnorm(grid[i,], mv.dist1[j,], I.mat/5)  
  }
}
prob.1
prob1.max=apply(prob.1,1,max)

#second class - as per above
prob.2=matrix(0:0,nrow=1681,ncol=10) #initialize grid
for (i in 1:1681){
  for (j in 1:10){
    prob.2[i,j]=dmnorm(grid[i,], mv.dist2[j,], I.mat/5)  
  }
}
prob.2
prob2.max=apply(prob.2,1,max)

#bind
prob.total=cbind(prob1.max,prob2.max)
class=rep(1,1681)
class[prob1.max<prob2.max]=2
cbind(prob.total,class)

#plot points
plot(grid[,1], grid[,2],pch=".", cex=3,col=ifelse(class==1, "coral", "cornflowerblue"))

points(values1,col="coral")
points(values2,col="cornflowerblue")

#check - original centers
# points(mv.dist1,col="coral")
# points(mv.dist2,col="cornflowerblue")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.