สมมติว่าไม่มีข้อมูลซ้ำอยู่ในข้อมูล
ถ้าn ≤ d+ 1 , น่าจะเป็นPr = 1 1
สำหรับชุดค่าผสมอื่นของ( n , d)โปรดดูพล็อตต่อไปนี้:
ฉันสร้างพล็อตนี้จำลองข้อมูลอินพุตและเอาต์พุตตามที่ระบุใน OP เชิงเส้นแยกได้ถูกกำหนดเป็นความล้มเหลวของการบรรจบกันในรูปแบบการถดถอยโลจิสติเนื่องจากผล Hauck-เนอร์
เราสามารถมองเห็นลดลงน่าจะเป็นสำหรับการเพิ่มnในความเป็นจริงเราสามารถใส่โมเดลที่เกี่ยวข้องกับถึงและนี่คือผลลัพธ์:nn , dพี
P( n , d) = 11 + e- ( 5.82944 - 4.58261 × n + 1.37271 × d- 0.0235785 × n × d)
รหัสสำหรับพล็อต (ใน Julia):
using GLM
ds = 10; #number of dimensions to be investigated
ns = 100 #number of examples to be investigated
niter = 1000; #number of iterations per d per n
P = niter * ones(Int64, ds, ns); #starting the number of successes
for d in 1:ds
for n in (d+1):ns
p = 0 #0 hits
for i in 1:niter
println("Dimensions: $d; Samples: $n; Iteration: $i;")
try #we will try to catch errors in the logistic glm, these are due to perfect separability
X = hcat(rand((n,d)), ones(n)); #sampling from uniform plus intercept
Y = sample(0:1, n) #sampling a binary outcome
glm(X, Y, Binomial(), LogitLink())
catch
p = p+1 #if we catch an error, increase the count
end
end
P[d,n] = p
end
end
using Plots
gui(heatmap(P./niter, xlabel = "Number of Samples", ylabel = "Number of Dimensions", title = "Probability of linear separability"))
รหัสสำหรับรูปแบบที่เกี่ยวข้องถึง (ใน Julia):( n , d)พี
probs = P./niter
N = transpose(repmat(1:ns, 1, ds))
D = repmat(1:ds, 1, ns)
fit = glm(hcat(log.(N[:]), D[:], N[:].*D[:], ones(ds*ns)), probs[:], Binomial(), LogitLink())
coef(fit)
#4-element Array{Float64,1}:
# -4.58261
# 1.37271
# -0.0235785
# 5.82944
gui(heatmap(reshape(predict(fit), ds, ns), xlabel = "Number of Samples", ylabel = "Number of Dimensions", title = "Fit of probability of linear separability"))