@@ -15,7 +15,7 @@ generated.
15
15
16
16
Here the word "probabilities" is an abuse of terminology as there is
17
17
no requirement that the that probabilities actually sum to one. Indeed
18
- there is no restriction on the probablities at all. In particular,
18
+ there is no restriction on the probabilities at all. In particular,
19
19
`UnivariateFinite` objects implement arbitrary non-negative, signed,
20
20
or complex measures over finite sets of labelled points. A
21
21
`UnivariateDistribution` will be a bona fide probability measure when
@@ -40,28 +40,37 @@ constructor then returns an array of `UnivariateFinite` distributions
40
40
of size `(n1, n2, ..., nk)`.
41
41
42
42
```
43
- using CategoricalArrays
44
- v = categorical([:x, :x, :y, :x, :z])
45
-
46
- julia> UnivariateFinite(classes(v), [0.2, 0.3, 0.5])
47
- UnivariateFinite{Multiclass{3}}(x=>0.2, y=>0.3, z=>0.5)
48
-
49
- julia> d = UnivariateFinite([v[1], v[end]], [0.1, 0.9])
43
+ using CategoricalDistributions, CategoricalArrays, Distributions
44
+ samples = categorical(['x', 'x', 'y', 'x', 'z'])
45
+ julia> Distributions.fit(UnivariateFinite, samples)
46
+ UnivariateFinite{Multiclass{3}}
47
+ ┌ ┐
48
+ x ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.6
49
+ y ┤■■■■■■■■■■■■ 0.2
50
+ z ┤■■■■■■■■■■■■ 0.2
51
+ └ ┘
52
+
53
+ julia> d = UnivariateFinite([samples[1], samples[end]], [0.1, 0.9])
50
54
UnivariateFinite{Multiclass{3}(x=>0.1, z=>0.9)
55
+ UnivariateFinite{Multiclass{3}}
56
+ ┌ ┐
57
+ x ┤■■■■ 0.1
58
+ z ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9
59
+ └ ┘
51
60
52
61
julia> rand(d, 3)
53
62
3-element Array{Any,1}:
54
- CategoricalArrays. CategoricalValue{Symbol,UInt32} :z
55
- CategoricalArrays. CategoricalValue{Symbol,UInt32} :z
56
- CategoricalArrays. CategoricalValue{Symbol,UInt32} :z
63
+ CategoricalValue{Symbol,UInt32} 'z'
64
+ CategoricalValue{Symbol,UInt32} 'z'
65
+ CategoricalValue{Symbol,UInt32} 'z'
57
66
58
- julia> levels(d )
67
+ julia> levels(samples )
59
68
3-element Array{Symbol,1}:
60
- :x
61
- :y
62
- :z
69
+ 'x'
70
+ 'y'
71
+ 'z'
63
72
64
- julia> pdf(d, :y )
73
+ julia> pdf(d, 'y' )
65
74
0.0
66
75
```
67
76
@@ -80,19 +89,27 @@ In the last case, specify `ordered=true` if the pool is to be
80
89
considered ordered.
81
90
82
91
```
83
- julia> UnivariateFinite([:x, :z], [0.1, 0.9], pool=missing, ordered=true)
84
- UnivariateFinite{OrderedFactor{2}}(x=>0.1, z=>0.9)
85
-
86
- julia> d = UnivariateFinite([:x, :z], [0.1, 0.9], pool=v) # v defined above
87
- UnivariateFinite(x=>0.1, z=>0.9) (Multiclass{3} samples)
88
-
89
- julia> pdf(d, :y) # allowed as `:y in levels(v)`
92
+ julia> UnivariateFinite(['x', 'z'], [0.1, 0.9], pool=missing, ordered=true)
93
+ UnivariateFinite{OrderedFactor{2}}
94
+ ┌ ┐
95
+ x ┤■■■■ 0.1
96
+ z ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9
97
+ └ ┘
98
+
99
+ samples = categorical(['x', 'x', 'y', 'x', 'z'])
100
+ julia> d = UnivariateFinite(['x', 'z'], [0.1, 0.9], pool=samples)
101
+ ┌ ┐
102
+ x ┤■■■■ 0.1
103
+ z ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.9
104
+ └ ┘
105
+
106
+ julia> pdf(d, 'y') # allowed as `'y' in levels(samples)`
90
107
0.0
91
108
92
- v = categorical([:x, :x, :y, :x, :z, :w ])
109
+ v = categorical(['x', 'x', 'y', 'x', 'z', 'w' ])
93
110
probs = rand(100, 3)
94
111
probs = probs ./ sum(probs, dims=2)
95
- julia> UnivariateFinite([:x, :y, :z ], probs, pool=v)
112
+ julia> d1 = UnivariateFinite(['x', 'y', 'z' ], probs, pool=v)
96
113
100-element UnivariateFiniteVector{Multiclass{4},Symbol,UInt32,Float64}:
97
114
UnivariateFinite{Multiclass{4}}(x=>0.194, y=>0.3, z=>0.505)
98
115
UnivariateFinite{Multiclass{4}}(x=>0.727, y=>0.234, z=>0.0391)
@@ -110,6 +127,18 @@ for the classes `c2, c3, ..., cn`. The class `c1` probabilities are
110
127
chosen so that each `UnivariateFinite` distribution in the returned
111
128
array is a bona fide probability distribution.
112
129
130
+ ```julia
131
+ julia> UnivariateFinite([0.1, 0.2, 0.3], augment=true, pool=missing)
132
+ 3-element UnivariateFiniteArray{Multiclass{2}, String, UInt8, Float64, 1}:
133
+ UnivariateFinite{Multiclass{2}}(class_1=>0.9, class_2=>0.1)
134
+ UnivariateFinite{Multiclass{2}}(class_1=>0.8, class_2=>0.2)
135
+ UnivariateFinite{Multiclass{2}}(class_1=>0.7, class_2=>0.3)
136
+
137
+ d2 = UnivariateFinite(['x', 'y', 'z'], probs[:, 2:end], augment=true, pool=v)
138
+ julia> pdf(d1, levels(v)) ≈ pdf(d2, levels(v))
139
+ true
140
+ ```
141
+
113
142
---
114
143
115
144
UnivariateFinite(prob_given_class; pool=nothing, ordered=false)
0 commit comments