Giả sử không có sự trùng lặp tồn tại trong dữ liệu.
Nếu , xác suất là .n ≤ d+ 1Pr = 1
Đối với các kết hợp khác của , xem biểu đồ sau:( n , d)
Tôi đã tạo ra âm mưu này mô phỏng dữ liệu đầu vào và đầu ra như được chỉ định trong OP. Khả năng phân tách tuyến tính được định nghĩa là sự thất bại của sự hội tụ trong mô hình hồi quy logistic, do hiệu ứng Hauck-Donner .
Chúng ta có thể thấy xác suất giảm khi tăng . Trên thực tế, chúng ta có thể điều chỉnh một mô hình liên quan đến đến và đây là kết quả:nn , dp
P( n , d) = 11 + e- ( 5,82944 - 4,58261 × n + 1.37271 × d- 0,0235785 × n × d)
Mã cho cốt truyện (trong 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"))
Mã cho mô hình liên quan đến (trong Julia):( n , d)p
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"))