nexosis_api 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nexosis_api/classifier_result.rb +25 -0
- data/lib/nexosis_api/client.rb +2 -0
- data/lib/nexosis_api/client/sessions.rb +19 -3
- data/lib/nexosis_api/message.rb +19 -0
- data/lib/nexosis_api/session.rb +19 -1
- data/lib/nexosis_api/session_response.rb +2 -0
- data/nexosisapi.gemspec +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8f386ea632449db904147f0f38b1fbb113633ef
|
4
|
+
data.tar.gz: c6afea0f24270d210be6fea0efa8e8e99be6b6fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27fcb7d85fe04fb158a52e2c1dc76f438f4bd8b71380b5d8410cd264081086b4038dc2010dc82ba5a84d5fcc46ce95d3a9836699d993997f243207263f794130
|
7
|
+
data.tar.gz: 88e9204cdfc9fd40e5ee0532acda9a56c7eb73677c301feb47a47886a0909e8a358fb9aa7fdf726992d6874a461a525901111f4a3db7dfc0a599268c37d0cbbb
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'nexosis_api/session'
|
2
|
+
module NexosisApi
|
3
|
+
# class to hold parsed results of confusion matrix request
|
4
|
+
# @since 1.4.1
|
5
|
+
class ClassifierResult < Session
|
6
|
+
def initialize(classify_result)
|
7
|
+
classify_result.each do |k, v|
|
8
|
+
if (k.to_s == 'confusionMatrix')
|
9
|
+
@confusion_matrix = v
|
10
|
+
elsif (k.to_s == 'classes')
|
11
|
+
@classes = v
|
12
|
+
end
|
13
|
+
end
|
14
|
+
super(classify_result)
|
15
|
+
end
|
16
|
+
|
17
|
+
# array of arrays to form confusion matrix results
|
18
|
+
# @return [Array of Array of Int] - the class counts for expected to predicted
|
19
|
+
attr_accessor :confusion_matrix
|
20
|
+
|
21
|
+
# Class labels in index order of matrix arrays
|
22
|
+
# @return [Array]
|
23
|
+
attr_accessor :classes
|
24
|
+
end
|
25
|
+
end
|
data/lib/nexosis_api/client.rb
CHANGED
@@ -2,6 +2,7 @@ require 'nexosis_api/algorithm_run'
|
|
2
2
|
require 'nexosis_api/algorithm_selection'
|
3
3
|
require 'nexosis_api/algorithm'
|
4
4
|
require 'nexosis_api/calendar_jointarget'
|
5
|
+
require 'nexosis_api/classifier_result'
|
5
6
|
require 'nexosis_api/column'
|
6
7
|
require 'nexosis_api/column_options'
|
7
8
|
require 'nexosis_api/column_role'
|
@@ -15,6 +16,7 @@ require 'nexosis_api/impact_metric'
|
|
15
16
|
require 'nexosis_api/imports_response'
|
16
17
|
require 'nexosis_api/join'
|
17
18
|
require 'nexosis_api/link'
|
19
|
+
require 'nexosis_api/message'
|
18
20
|
require 'nexosis_api/metric'
|
19
21
|
require 'nexosis_api/model_summary'
|
20
22
|
require 'nexosis_api/paged_array'
|
@@ -157,15 +157,19 @@ module NexosisApi
|
|
157
157
|
# @param datasource_name [String] The datasource from which to build the model
|
158
158
|
# @param target_column [String] The column which will be predicted when using the model
|
159
159
|
# @param columns [Hash] column metadata to modify roles, imputation, or target.
|
160
|
+
# @param options [Hash] prediction_domain and or balanced indicator for classification
|
161
|
+
# @note - classifcation assumes balanced classes. The use of a 'balanced=false' option
|
162
|
+
# indicates that no attempt should be made to sample the classes in balanced fashion.
|
160
163
|
# @since 1.3.0
|
161
|
-
def create_model(datasource_name, target_column, columns = {})
|
164
|
+
def create_model(datasource_name, target_column, columns = {}, options = { prediction_domain: 'regression' })
|
162
165
|
model_url = '/sessions/model'
|
163
166
|
body = {
|
164
167
|
dataSourceName: datasource_name,
|
165
168
|
targetColumn: target_column,
|
166
|
-
predictionDomain:
|
169
|
+
predictionDomain: options[:prediction_domain].downcase,
|
167
170
|
isEstimate: false
|
168
171
|
}
|
172
|
+
body.store(:balance, options[:balance]) if options.include?(:balance) && body[:predictionDomain] == 'classification'
|
169
173
|
body.store(columns: columns) unless columns.empty?
|
170
174
|
response = self.class.post(model_url, headers: @headers, body: body.to_json)
|
171
175
|
if response.success?
|
@@ -176,6 +180,18 @@ module NexosisApi
|
|
176
180
|
end
|
177
181
|
end
|
178
182
|
|
183
|
+
# Get the confusion matrix for a completed classification session
|
184
|
+
# @param session_id [String] The unique id of the completed classification session
|
185
|
+
# @return [NexosisApi::ClassifierResult] a confusion matrix along with class labels and other session information.
|
186
|
+
# @since 1.4.1
|
187
|
+
# @note - This endpoint returns a 404 for requests of non-classification sessions
|
188
|
+
def get_confusion_matrix(session_id)
|
189
|
+
result_url = "/sessions/#{session_id}/results/confusionmatrix"
|
190
|
+
response = self.class.get(result_url, headers: @headers)
|
191
|
+
raise HttpException.new("There was a problem getting a confusion matrix for session #{session_id}", 'getting confusion matrix', response) unless response.success?
|
192
|
+
NexosisApi::ClassifierResult.new(response.parsed_response)
|
193
|
+
end
|
194
|
+
|
179
195
|
private
|
180
196
|
|
181
197
|
# @private
|
@@ -205,7 +221,7 @@ module NexosisApi
|
|
205
221
|
session_hash = { 'session' => response.parsed_response }.merge(response.headers)
|
206
222
|
NexosisApi::SessionResponse.new(session_hash)
|
207
223
|
else
|
208
|
-
raise HttpException.new("Unable to create new #{type} session", "Create session for dataset #{dataset_name}",response)
|
224
|
+
raise HttpException.new("Unable to create new #{type} session", "Create session for dataset #{dataset_name}", response)
|
209
225
|
end
|
210
226
|
end
|
211
227
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module NexosisApi
|
2
|
+
# class to provide message responses
|
3
|
+
# @since 1.4.1
|
4
|
+
class Message
|
5
|
+
def initialize(message_hash)
|
6
|
+
message_hash.each do |k,v|
|
7
|
+
instance_variable_set("@#{k}", v) unless v.nil?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# The type of message: information, warning, or error
|
12
|
+
# @return [String]
|
13
|
+
attr_accessor :severity
|
14
|
+
|
15
|
+
# The content of the message
|
16
|
+
# @return [String]
|
17
|
+
attr_accessor :message
|
18
|
+
end
|
19
|
+
end
|
data/lib/nexosis_api/session.rb
CHANGED
@@ -8,7 +8,8 @@ module NexosisApi
|
|
8
8
|
'sessionId' => :@session_id,
|
9
9
|
'availablePredictionIntervals' => :@prediction_intervals,
|
10
10
|
'startDate' => :@start_date,
|
11
|
-
'endDate' => :@end_date
|
11
|
+
'endDate' => :@end_date,
|
12
|
+
'predictionDomain' => :@prediction_domain }
|
12
13
|
session_hash.each do |k, v|
|
13
14
|
if (k == 'links')
|
14
15
|
@links = v.map { |l| NexosisApi::Link.new(l) }
|
@@ -19,6 +20,8 @@ module NexosisApi
|
|
19
20
|
end
|
20
21
|
elsif (k == 'requestedDate')
|
21
22
|
@requested_date = DateTime.parse(v)
|
23
|
+
elsif (k == 'messages')
|
24
|
+
@messages = v.map { |m| NexosisApi::Message.new(m) } unless v.empty?
|
22
25
|
else
|
23
26
|
instance_variable_set("@#{k}", v) unless v.nil?
|
24
27
|
end
|
@@ -121,5 +124,20 @@ module NexosisApi
|
|
121
124
|
# this list for other intervals which can be requested.
|
122
125
|
# @since 1.4.0
|
123
126
|
attr_accessor :prediction_intervals
|
127
|
+
|
128
|
+
# The type of model if a model creation session
|
129
|
+
# @return [String]
|
130
|
+
# @since 1.4.1
|
131
|
+
attr_accessor :prediction_domain
|
132
|
+
|
133
|
+
# A list of warning or error messages optionally returned from session
|
134
|
+
# @return [Array of Message]
|
135
|
+
attr_accessor :messages
|
136
|
+
|
137
|
+
# Whether classes were sampled as balanced in the context of a classification model
|
138
|
+
# @return [Boolean]
|
139
|
+
# @note - the default is true and has no means outside of classification
|
140
|
+
# @since 1.4.1
|
141
|
+
attr_accessor :balance
|
124
142
|
end
|
125
143
|
end
|
data/nexosisapi.gemspec
CHANGED
@@ -16,6 +16,6 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.require_paths = ['lib']
|
17
17
|
spec.required_ruby_version = '>= 2.0.0'
|
18
18
|
spec.summary = "Ruby client for working with the Nexosis API"
|
19
|
-
spec.version = '1.4.
|
19
|
+
spec.version = '1.4.1'
|
20
20
|
spec.metadata["yard.run"] = "yri"
|
21
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nexosis_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nexosis,Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- lib/nexosis_api/algorithm_run.rb
|
51
51
|
- lib/nexosis_api/algorithm_selection.rb
|
52
52
|
- lib/nexosis_api/calendar_jointarget.rb
|
53
|
+
- lib/nexosis_api/classifier_result.rb
|
53
54
|
- lib/nexosis_api/client.rb
|
54
55
|
- lib/nexosis_api/client/datasets.rb
|
55
56
|
- lib/nexosis_api/client/imports.rb
|
@@ -69,6 +70,7 @@ files:
|
|
69
70
|
- lib/nexosis_api/imports_response.rb
|
70
71
|
- lib/nexosis_api/join.rb
|
71
72
|
- lib/nexosis_api/link.rb
|
73
|
+
- lib/nexosis_api/message.rb
|
72
74
|
- lib/nexosis_api/metric.rb
|
73
75
|
- lib/nexosis_api/model_summary.rb
|
74
76
|
- lib/nexosis_api/paged_array.rb
|