স্ট্যাটিস্টিকাল লার্নিংয়ের এলিমেন্টস থেকে কে-নিকটতম প্রতিবেশী শ্রেণিবদ্ধের সিদ্ধান্তের সীমানা কীভাবে প্লট করবেন?


31

ট্রেভর হাস্টি এবং রবার্ট তিবশিরানী এবং জেরোম ফ্রেডম্যানের এলিমেস্ট্যাটলার্ন "স্ট্যাটাসটিকাল লার্নিং এর উপাদানসমূহ: ডেটা মাইনিং, ইনফারেন্সেশন এবং প্রিডিকেশন। দ্বিতীয় সংস্করণ" বইয়ে বর্ণিত প্লটটি আমি উত্পন্ন করতে চাই। প্লটটি হ'ল:

এখানে চিত্র বর্ণনা লিখুন

আমি ভাবছি যে আমি কীভাবে এই সঠিক গ্রাফটি উত্পাদন করতে পারি R, বিশেষ করে গ্রিড গ্রাফিক্স এবং সীমানাটি দেখানোর জন্য গণনা নোট করুন।



1
@ স্ট্যাস্ক: হ্যাঁ, এটি হয়েছে। প্লট কিভাবে জেনারেট করবেন? আপনি দয়া করে সাহায্য করবেন? অনেক ধন্যবাদ!
আইনস্টাইন

উত্তর:


35

এই চিত্রটি পুনরুত্পাদন করার জন্য আপনার সিস্টেমে আপনার কাছে ইলেমস্ট্যাটলার্ন প্যাকেজ ইনস্টল থাকা দরকার। mixture.example()@ স্ট্যাসকে নির্দেশিত হিসাবে কৃত্রিম ডেটাসেট তৈরি করা হয়েছিল।

library(ElemStatLearn)
require(class)
x <- mixture.example$x
g <- mixture.example$y
xnew <- mixture.example$xnew
mod15 <- knn(x, xnew, g, k=15, prob=TRUE)
prob <- attr(mod15, "prob")
prob <- ifelse(mod15=="1", prob, 1-prob)
px1 <- mixture.example$px1
px2 <- mixture.example$px2
prob15 <- matrix(prob, length(px1), length(px2))
par(mar=rep(2,4))
contour(px1, px2, prob15, levels=0.5, labels="", xlab="", ylab="", main=
        "15-nearest neighbour", axes=FALSE)
points(x, col=ifelse(g==1, "coral", "cornflowerblue"))
gd <- expand.grid(x=px1, y=px2)
points(gd, pch=".", cex=1.2, col=ifelse(prob15>0.5, "coral", "cornflowerblue"))
box()

শেষ তিনটি কমান্ড ব্যতীত সমস্ত অন-লাইন সহায়তা থেকে আসে mixture.example। মনে রাখবেন যে আমরা expand.gridতার আউটপুটটি xপ্রথমে পৃথক করে ব্যবস্থা করব , যা prob15পরবর্তীকালে ম্যাট্রিক্সে ( কলাম দ্বারা) রং সূচিকরণের অনুমতি দেয় (মাত্রা 69x99), যা প্রতিটি জালিক স্থানাঙ্কের জন্য বিজয়ী শ্রেণির জন্য ভোটের অনুপাত রাখে ( px1, px2)।

এখানে চিত্র বর্ণনা লিখুন


+1 টি। ধন্যবাদ! "ওরাকল উদ্ঘাটিত" পাঠ্যে বর্ণিত তথ্যটি কীভাবে উত্পন্ন করা যায় তা আমিও ভাবছি। আপনি কি দয়া করে ওয়েবসাইট থেকে ডেটা ব্যবহারের পরিবর্তে এটি যুক্ত করতে পারেন?
আইনস্টাইন

@ লিটলইনস্টাইন আপনার অর্থ কি অনলাইনে সাহায্যের জন্য দেওয়া হয় mixture.example? # Reproducing figure 2.4, page 17 of the book:উদাহরণ বিভাগে শুরু করে নীচের সিমুলেশন সেটআপটি দেখুন ।
chl

আপনি দয়া করে আমাকে লিঙ্কটি জানাতে পারেন? আমি এটা খুঁজে পাচ্ছি না.
আইনস্টাইন

দুঃখিত @ লিটলইনস্টাইন, তবে এমন কিছু আছে যা আমি সম্ভবত অনুপস্থিত। এটি কেবল টাইপ করার বিষয়টি help(mixture.example)বা example(mixture.example)আর প্রম্পটে (আপনার প্রয়োজনীয় প্যাকেজটি লোড করার পরে library(ElemStatLearn))। কৃত্রিম ডেটাসেট তৈরি করার কোড (চিত্র 2.4 উত্পন্ন করার জন্য নয়) উদাহরণ বিভাগে সরল আরতে লেখা আছে।
chl

1
বিটিডব্লিউ, আমি সবেমাত্র @ শেনের ওয়েবলগ জুড়ে এসেছি যেখানে তিনি ggplotঅনুরূপ উদ্দেশ্যে ব্যবহার করেছেন। এটি দেখুন: ESL 2.1: লিনিয়ার রিগ্রেশন বনাম কেএনএন
chl

7

আমি ইএসএলকে স্ব-শিখছি এবং বইটিতে প্রদত্ত সমস্ত উদাহরণ দিয়ে কাজ করার চেষ্টা করছি। আমি কেবল এটি করেছি এবং আপনি নীচের আর কোডটি চেক করতে পারেন:

library(MASS)
# set the seed to reproduce data generation in the future
seed <- 123456
set.seed(seed)

# generate two classes means
Sigma <- matrix(c(1,0,0,1),nrow = 2, ncol = 2)
means_1 <- mvrnorm(n = 10, mu = c(1,0), Sigma)
means_2 <- mvrnorm(n = 10, mu = c(0,1), Sigma)

# pick an m_k at random with probability 1/10
# function to generate observations
genObs <- function(classMean, classSigma, size, ...)
{
  # check input
  if(!is.matrix(classMean)) stop("classMean should be a matrix")
  nc <- ncol(classMean)
  nr <- nrow(classMean)
  if(nc != 2) stop("classMean should be a matrix with 2 columns")
  if(ncol(classSigma) != 2) stop("the dimension of classSigma is wrong")

  # mean for each obs
    # pick an m_k at random
  meanObs <- classMean[sample(1:nr, size = size, replace = TRUE),]
  obs <- t(apply(meanObs, 1, function(x) mvrnorm(n = 1, mu = x, Sigma = classSigma )) )
  colnames(obs) <- c('x1','x2')
  return(obs)
}


obs100_1 <- genObs(classMean = means_1, classSigma = Sigma/5, size = 100)
obs100_2 <- genObs(classMean = means_2, classSigma = Sigma/5, size = 100)

# generate label
y <- rep(c(0,1), each = 100)

# training data matrix
trainMat <- as.data.frame(cbind(y, rbind(obs100_1, obs100_2)))

# plot them
library(lattice)
with(trainMat, xyplot(x2 ~ x1,groups = y, col=c('blue', 'orange')))

# now fit two models

# model 1: linear regression
lmfits <- lm(y ~ x1 + x2 , data = trainMat)

# get the slope and intercept for the decision boundary
intercept <- -(lmfits$coef[1] - 0.5) / lmfits$coef[3]
slope <- - lmfits$coef[2] / lmfits$coef[3]

# Figure 2.1
xyplot(x2 ~ x1, groups = y, col = c('blue', 'orange'), data = trainMat,
       panel = function(...)
       {
        panel.xyplot(...)
        panel.abline(intercept, slope)
        },
       main = 'Linear Regression of 0/1 Response')    

# model2: k nearest-neighbor methods
library(class)
# get the range of x1 and x2
rx1 <- range(trainMat$x1)
rx2 <- range(trainMat$x2)
# get lattice points in predictor space
px1 <- seq(from = rx1[1], to = rx1[2], by = 0.1 )
px2 <- seq(from = rx2[1], to = rx2[2], by = 0.1 )
xnew <- expand.grid(x1 = px1, x2 = px2)

# get the contour map
knn15 <- knn(train = trainMat[,2:3], test = xnew, cl = trainMat[,1], k = 15, prob = TRUE)
prob <- attr(knn15, "prob")
prob <- ifelse(knn15=="1", prob, 1-prob)
prob15 <- matrix(prob, nrow = length(px1), ncol = length(px2))

# Figure 2.2
par(mar = rep(2,4))
contour(px1, px2, prob15, levels=0.5, labels="", xlab="", ylab="", main=
    "15-nearest neighbour", axes=FALSE)
points(trainMat[,2:3], col=ifelse(trainMat[,1]==1, "coral", "cornflowerblue"))
points(xnew, pch=".", cex=1.2, col=ifelse(prob15>0.5, "coral", "cornflowerblue"))
box()

1
এটি না করেই এখানে কোড প্রবেশ করতে, আপনি কোডটি পাঠ্যটি হাইলাইট করতে পারেন এবং তারপরে পৃষ্ঠার শীর্ষের নিকটে "কোড" বোতামটি ক্লিক করতে পারেন। এটি আইকন / বোতামগুলির এক সারিতে রয়েছে। কোডটি একটিকে ধনুর্বন্ধকের মতো দেখাচ্ছে।
পিটার ফ্লুম - মনিকা পুনরায়

পুনরায়: "আর কোডের একটি ব্লক কীভাবে আটকানো যায়"। আপনার পোস্টটি সম্পাদনা করার সময় আপনার একটি ছোট মেনু বারে অ্যাক্সেস থাকতে পারে ।
chl

অতিরিক্তভাবে, আপনি যদি কোনও সম্পাদক ব্যবহার করছেন যা সহজেই কোডের ব্লকগুলিকে ইন্ডেন্ট করতে পারে তবে আমি মনে করি আপনি কোনওটিতে স্যুইচিং করতে খুশি হবেন। Rstudio মধ্যে যেমন কোড নির্বাচন করে এবং ট্যাব ইনডেন্ট এটা টিপে তেজ মধ্যে আপনি যা করতে পারেন 5>>ইত্যাদি
মার্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.