diff --git a/docs/release-notes/release-1.2.0.md b/docs/release-notes/release-1.2.0.md new file mode 100644 index 00000000..af91d2a3 --- /dev/null +++ b/docs/release-notes/release-1.2.0.md @@ -0,0 +1,52 @@ +# [NimbusML](https://docs.microsoft.com/en-us/nimbusml/overview) 1.2.0 + +## **New Features** + +- **Time Series Spike And Change Point Detection** + + [PR#135](https://github.com/microsoft/NimbusML/pull/135) added support + for time series spike and change point detection using the Independent + and identically distributed (IID) and Singular Spectrum Analysis (SSA) + algorithms. + + **Spike Detection Examples** + + - [IID using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/IidSpikeDetector_df.py) + - [SSA using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/SsaSpikeDetector_df.py) + - [IID using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/IidSpikeDetector.py) + - [SSA using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/SsaSpikeDetector.py) + + **Change Point Detection Examples** + + - [IID using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/IidChangePointDetector_df.py) + - [SSA using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/SsaChangePointDetector_df.py) + - [IID using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/IidChangePointDetector.py) + - [SSA using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/SsaChangePointDetector.py) + +- **Time Series Forecasting** + [PR#164](https://github.com/microsoft/NimbusML/pull/164) exposes an API + for time series forecasting using Singular Spectrum Analysis(SSA). + + **Forecasting Examples** + - [Using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/SsaForecaster_df.py) + - [Using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/SsaForecaster.py) + +## **Bug Fixes** + +None. + +## **Breaking Changes** + +None. + +## **Enhancements** + +None. + +## **Documentation and Samples** + +- Sample for CharTokenizer. [PR#153](https://github.com/microsoft/NimbusML/pull/153) + +## **Remarks** + +None. diff --git a/release-next.md b/release-next.md index a6d9aba0..bed2f26f 100644 --- a/release-next.md +++ b/release-next.md @@ -2,30 +2,7 @@ ## **New Features** -- **Time Series Spike And Change Point Detection** - - [PR#135](https://github.com/microsoft/NimbusML/pull/135) added support - for time series spike and change point detection using the Independent - and identically distributed (IID) and Singular Spectrum Analysis (SSA) - algorithms. - - **Spike Detection Examples** - - - [IID using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/IidSpikeDetector_df.py) - - [SSA using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/SsaSpikeDetector_df.py) - - [IID using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/IidSpikeDetector.py) - - [SSA using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/SsaSpikeDetector.py) - - **Change Point Detection Examples** - - - [IID using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/IidChangePointDetector_df.py) - - [SSA using a pandas Series](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/examples_from_dataframe/SsaChangePointDetector_df.py) - - [IID using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/IidChangePointDetector.py) - - [SSA using a FileDataStream](https://github.com/microsoft/NimbusML/tree/master/src/python/nimbusml/examples/SsaChangePointDetector.py) - -- **Time Series Forecasting** - [PR#164](https://github.com/microsoft/NimbusML/pull/164) exposes an API - for time series forecasting using Singular Spectrum Analysis(SSA). +None. ## **Bug Fixes** @@ -41,7 +18,7 @@ None. ## **Documentation and Samples** -TBD. +None. ## **Remarks** diff --git a/src/DotNetBridge/DotNetBridge.csproj b/src/DotNetBridge/DotNetBridge.csproj index fab49e2e..9e89c206 100644 --- a/src/DotNetBridge/DotNetBridge.csproj +++ b/src/DotNetBridge/DotNetBridge.csproj @@ -31,16 +31,16 @@ all runtime; build; native; contentfiles; analyzers - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/Platforms/build.csproj b/src/Platforms/build.csproj index e75aa8f3..99150a1e 100644 --- a/src/Platforms/build.csproj +++ b/src/Platforms/build.csproj @@ -11,16 +11,16 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/python/nimbusml/__init__.py b/src/python/nimbusml/__init__.py index d8da5d6d..e2bfa49c 100644 --- a/src/python/nimbusml/__init__.py +++ b/src/python/nimbusml/__init__.py @@ -2,7 +2,7 @@ Microsoft Machine Learning for Python """ -__version__ = '1.1.0' +__version__ = '1.2.0' # CoreCLR version of MicrosoftML is built on Windows. # But file permissions are not preserved when it's copied to Linux. diff --git a/src/python/nimbusml/ensemble/lightgbmbinaryclassifier.py b/src/python/nimbusml/ensemble/lightgbmbinaryclassifier.py index c87bbbb0..7204edae 100644 --- a/src/python/nimbusml/ensemble/lightgbmbinaryclassifier.py +++ b/src/python/nimbusml/ensemble/lightgbmbinaryclassifier.py @@ -156,7 +156,7 @@ def __init__( unbalanced_sets=False, weight_of_positive_examples=1.0, sigmoid=0.5, - evaluation_metric='Logloss', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/ensemble/lightgbmclassifier.py b/src/python/nimbusml/ensemble/lightgbmclassifier.py index b59c4f7c..0b87593c 100644 --- a/src/python/nimbusml/ensemble/lightgbmclassifier.py +++ b/src/python/nimbusml/ensemble/lightgbmclassifier.py @@ -78,6 +78,9 @@ class LightGbmClassifier(core, BasePredictor, ClassifierMixin): :param caching: Whether trainer should cache input training data. + :param unbalanced_sets: Use for multi-class classification when training + data is not balanced. + :param use_softmax: Use softmax loss for the multi classification. :param sigmoid: Parameter for the sigmoid function. @@ -145,9 +148,10 @@ def __init__( booster=None, normalize='Auto', caching='Auto', + unbalanced_sets=False, use_softmax=None, sigmoid=0.5, - evaluation_metric='Error', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, @@ -198,6 +202,7 @@ def __init__( booster=booster, normalize=normalize, caching=caching, + unbalanced_sets=unbalanced_sets, use_softmax=use_softmax, sigmoid=sigmoid, evaluation_metric=evaluation_metric, diff --git a/src/python/nimbusml/ensemble/lightgbmranker.py b/src/python/nimbusml/ensemble/lightgbmranker.py index fb96f5cd..1a62d2bf 100644 --- a/src/python/nimbusml/ensemble/lightgbmranker.py +++ b/src/python/nimbusml/ensemble/lightgbmranker.py @@ -150,7 +150,7 @@ def __init__( caching='Auto', custom_gains=[0, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095], sigmoid=0.5, - evaluation_metric='NormalizedDiscountedCumulativeGain', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/ensemble/lightgbmregressor.py b/src/python/nimbusml/ensemble/lightgbmregressor.py index 0d0a69ae..34aa732b 100644 --- a/src/python/nimbusml/ensemble/lightgbmregressor.py +++ b/src/python/nimbusml/ensemble/lightgbmregressor.py @@ -141,7 +141,7 @@ def __init__( booster=None, normalize='Auto', caching='Auto', - evaluation_metric='RootMeanSquaredError', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/internal/core/ensemble/lightgbmbinaryclassifier.py b/src/python/nimbusml/internal/core/ensemble/lightgbmbinaryclassifier.py index 2bf8468b..f44c5841 100644 --- a/src/python/nimbusml/internal/core/ensemble/lightgbmbinaryclassifier.py +++ b/src/python/nimbusml/internal/core/ensemble/lightgbmbinaryclassifier.py @@ -145,7 +145,7 @@ def __init__( unbalanced_sets=False, weight_of_positive_examples=1.0, sigmoid=0.5, - evaluation_metric='Logloss', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/internal/core/ensemble/lightgbmclassifier.py b/src/python/nimbusml/internal/core/ensemble/lightgbmclassifier.py index ca87aa7b..865587fd 100644 --- a/src/python/nimbusml/internal/core/ensemble/lightgbmclassifier.py +++ b/src/python/nimbusml/internal/core/ensemble/lightgbmclassifier.py @@ -70,6 +70,9 @@ class LightGbmClassifier( :param caching: Whether trainer should cache input training data. + :param unbalanced_sets: Use for multi-class classification when training + data is not balanced. + :param use_softmax: Use softmax loss for the multi classification. :param sigmoid: Parameter for the sigmoid function. @@ -137,9 +140,10 @@ def __init__( booster=None, normalize='Auto', caching='Auto', + unbalanced_sets=False, use_softmax=None, sigmoid=0.5, - evaluation_metric='Error', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, @@ -165,6 +169,7 @@ def __init__( self.booster = booster self.normalize = normalize self.caching = caching + self.unbalanced_sets = unbalanced_sets self.use_softmax = use_softmax self.sigmoid = sigmoid self.evaluation_metric = evaluation_metric @@ -201,6 +206,7 @@ def _get_node(self, **all_args): booster=self.booster, normalize_features=self.normalize, caching=self.caching, + unbalanced_sets=self.unbalanced_sets, use_softmax=self.use_softmax, sigmoid=self.sigmoid, evaluation_metric=self.evaluation_metric, diff --git a/src/python/nimbusml/internal/core/ensemble/lightgbmranker.py b/src/python/nimbusml/internal/core/ensemble/lightgbmranker.py index 6c06148d..17d23591 100644 --- a/src/python/nimbusml/internal/core/ensemble/lightgbmranker.py +++ b/src/python/nimbusml/internal/core/ensemble/lightgbmranker.py @@ -140,7 +140,7 @@ def __init__( caching='Auto', custom_gains=[0, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095], sigmoid=0.5, - evaluation_metric='NormalizedDiscountedCumulativeGain', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/internal/core/ensemble/lightgbmregressor.py b/src/python/nimbusml/internal/core/ensemble/lightgbmregressor.py index 20fe5e57..6d053a54 100644 --- a/src/python/nimbusml/internal/core/ensemble/lightgbmregressor.py +++ b/src/python/nimbusml/internal/core/ensemble/lightgbmregressor.py @@ -133,7 +133,7 @@ def __init__( booster=None, normalize='Auto', caching='Auto', - evaluation_metric='RootMeanSquaredError', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmbinaryclassifier.py b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmbinaryclassifier.py index 5a54c69f..472fe605 100644 --- a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmbinaryclassifier.py +++ b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmbinaryclassifier.py @@ -26,7 +26,7 @@ def trainers_lightgbmbinaryclassifier( unbalanced_sets=False, weight_of_positive_examples=1.0, sigmoid=0.5, - evaluation_metric='Logloss', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmclassifier.py b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmclassifier.py index b1227046..d1ac99df 100644 --- a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmclassifier.py +++ b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmclassifier.py @@ -23,9 +23,10 @@ def trainers_lightgbmclassifier( row_group_column_name=None, normalize_features='Auto', caching='Auto', + unbalanced_sets=False, use_softmax=None, sigmoid=0.5, - evaluation_metric='Error', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, @@ -65,6 +66,8 @@ def trainers_lightgbmclassifier( column (inputs). :param caching: Whether trainer should cache input training data (inputs). + :param unbalanced_sets: Use for multi-class classification when + training data is not balanced (inputs). :param use_softmax: Use softmax loss for the multi classification. (inputs). :param sigmoid: Parameter for the sigmoid function. (inputs). @@ -174,6 +177,11 @@ def trainers_lightgbmclassifier( 'Auto', 'Memory', 'None']) + if unbalanced_sets is not None: + inputs['UnbalancedSets'] = try_set( + obj=unbalanced_sets, + none_acceptable=True, + is_of_type=bool) if use_softmax is not None: inputs['UseSoftmax'] = try_set( obj=use_softmax, diff --git a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmranker.py b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmranker.py index 5a3a44fd..1da8408d 100644 --- a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmranker.py +++ b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmranker.py @@ -25,7 +25,7 @@ def trainers_lightgbmranker( caching='Auto', custom_gains=[0, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095], sigmoid=0.5, - evaluation_metric='NormalizedDiscountedCumulativeGain', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmregressor.py b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmregressor.py index 32260ebe..ffd022cd 100644 --- a/src/python/nimbusml/internal/entrypoints/trainers_lightgbmregressor.py +++ b/src/python/nimbusml/internal/entrypoints/trainers_lightgbmregressor.py @@ -23,7 +23,7 @@ def trainers_lightgbmregressor( row_group_column_name=None, normalize_features='Auto', caching='Auto', - evaluation_metric='RootMeanSquaredError', + evaluation_metric='Default', maximum_bin_count_per_feature=255, verbose=False, silent=True, diff --git a/src/python/nimbusml/pipeline.py b/src/python/nimbusml/pipeline.py index 74435d87..5a15bac4 100644 --- a/src/python/nimbusml/pipeline.py +++ b/src/python/nimbusml/pipeline.py @@ -2210,18 +2210,26 @@ def _validate_model_summary(self, model_summary): "is expected ".format( type(model_summary))) - str_bias = 'Bias' - str_classnames = 'ClassNames' - str_coefficients = 'Coefficients' - str_weights = 'Weights' - str_gains = 'Gains' - str_support_vectors = 'Support vectors.' + col_names = [ + 'Bias', + 'ClassNames', + 'Coefficients', + 'PredictorName', + 'Summary', + 'VectorName' + ] + + col_name_prefixes = [ + 'Weights', + 'Gains', + 'Support vectors.', + 'VectorData' + ] for col in model_summary.columns: - if col in (str_bias, str_classnames, str_coefficients): + if col in col_names: pass - elif col.startswith(str_weights) or col.startswith( - str_gains) or col.startswith(str_support_vectors): + elif any([col.startswith(pre) for pre in col_name_prefixes]): pass else: raise TypeError( diff --git a/src/python/nimbusml/tests/model_summary/test_model_summary.py b/src/python/nimbusml/tests/model_summary/test_model_summary.py index 403c86cb..e21d25e9 100644 --- a/src/python/nimbusml/tests/model_summary/test_model_summary.py +++ b/src/python/nimbusml/tests/model_summary/test_model_summary.py @@ -32,7 +32,7 @@ from nimbusml.linear_model import OrdinaryLeastSquaresRegressor from nimbusml.linear_model import PoissonRegressionRegressor from nimbusml.linear_model import SgdBinaryClassifier -# from nimbusml.linear_model import SymSgdBinaryClassifier +#from nimbusml.linear_model import SymSgdBinaryClassifier from nimbusml.multiclass import OneVsRestClassifier from nimbusml.naive_bayes import NaiveBayesClassifier from sklearn.utils.testing import assert_raises @@ -53,13 +53,6 @@ 'col=sex:TX:7 col=native-country-region:TX:8 header+' label_column = 'label' learners = [ - FastForestBinaryClassifier(), - FastForestRegressor(), - FastTreesBinaryClassifier(), - FastTreesRegressor(), - FastTreesTweedieRegressor(), - LightGbmRegressor(), - LightGbmBinaryClassifier(), AveragedPerceptronBinaryClassifier(), FastLinearBinaryClassifier(), FastLinearClassifier(), @@ -68,29 +61,35 @@ LogisticRegressionClassifier(), OnlineGradientDescentRegressor(), SgdBinaryClassifier(), - # SymSgdBinaryClassifier(), + # Error on linux + # Unable to load shared library 'SymSgdNative' or one of its dependencies + #SymSgdBinaryClassifier(), OrdinaryLeastSquaresRegressor(), - PoissonRegressionRegressor() + PoissonRegressionRegressor(), + OneVsRestClassifier(FastLinearBinaryClassifier()), + LightGbmClassifier(), + GamRegressor(), + GamBinaryClassifier(), + PcaAnomalyDetector(), + FactorizationMachineBinaryClassifier(), + KMeansPlusPlus(), + NaiveBayesClassifier() + + # Skipping these tests since they are throwing the following error: + # *** System.NotSupportedException: 'Column has variable length + # vector: CategoricalSplitFeatures. Not supported in python. + # Drop column before sending to Python + #FastForestBinaryClassifier(), + #FastForestRegressor(), + #FastTreesBinaryClassifier(), + #FastTreesRegressor(), + #FastTreesTweedieRegressor(), + #LightGbmRegressor(), + #LightGbmBinaryClassifier(), ] learners_not_supported = [ - NaiveBayesClassifier(), - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - KMeansPlusPlus(), - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - FactorizationMachineBinaryClassifier(), - PcaAnomalyDetector(), - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - # PcaTransformer(), # REVIEW: crashes - GamBinaryClassifier(), - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - GamRegressor(), # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - LightGbmClassifier(), - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - # LightGbmRanker(), # REVIEW: crashes - # fix in nimbusml, needs to implement ICanGetSummaryAsIDataView - OneVsRestClassifier(FastLinearBinaryClassifier()), + #PcaTransformer(), # REVIEW: crashes ] @@ -104,6 +103,7 @@ def test_model_summary(self): pipeline.fit(train_stream, label_column) pipeline.summary() + @unittest.skip("No unsupported learners") def test_model_summary_not_supported(self): for learner in learners_not_supported: pipeline = Pipeline( diff --git a/src/python/nimbusml/tests/timeseries/test_ssaforecaster.py b/src/python/nimbusml/tests/timeseries/test_ssaforecaster.py index d4cc3e84..27f35044 100644 --- a/src/python/nimbusml/tests/timeseries/test_ssaforecaster.py +++ b/src/python/nimbusml/tests/timeseries/test_ssaforecaster.py @@ -14,7 +14,6 @@ class TestSsaForecaster(unittest.TestCase): - @unittest.skip('ml.net libraries containing timeseries forecasting are not included with nimbusml yet.') def test_simple_forecast(self): seasonality_size = 5 seasonal_data = np.arange(seasonality_size) @@ -39,7 +38,6 @@ def test_simple_forecast(self): self.assertEqual(len(data['fc.0']), 15) - @unittest.skip('ml.net libraries containing timeseries forecasting are not included with nimbusml yet.') def test_multiple_user_specified_columns_is_not_allowed(self): path = get_dataset('timeseries').as_filepath() data = FileDataStream.read_csv(path) diff --git a/src/python/setup.py b/src/python/setup.py index 2ed6c93d..80f47621 100644 --- a/src/python/setup.py +++ b/src/python/setup.py @@ -45,7 +45,7 @@ # Versions should comply with PEP440. For a discussion on # single-sourcing the version across setup.py and the project code, see # https://packaging.python.org/en/latest/single_source_version.html - version='1.1.0', + version='1.2.0', description='NimbusML', long_description=long_description, diff --git a/src/python/tests/test_estimator_checks.py b/src/python/tests/test_estimator_checks.py index de6d5900..f101b1ec 100644 --- a/src/python/tests/test_estimator_checks.py +++ b/src/python/tests/test_estimator_checks.py @@ -278,9 +278,6 @@ def load_json(file_path): # skip SymSgdBinaryClassifier for now, because of crashes. if 'SymSgdBinaryClassifier' in class_name: continue - # skip for now because the ml.net binaries do not contain the SsaForecasting code. - if 'SsaForecaster' in class_name: - continue mod = __import__('nimbusml.' + e[0], fromlist=[str(class_name)]) the_class = getattr(mod, class_name) diff --git a/src/python/tools/manifest.json b/src/python/tools/manifest.json index 8aa6ca9a..35ebb09d 100644 --- a/src/python/tools/manifest.json +++ b/src/python/tools/manifest.json @@ -11535,7 +11535,7 @@ "Required": false, "SortOrder": 150.0, "IsNullable": false, - "Default": "Logloss" + "Default": "Default" }, { "Name": "MaximumBinCountPerFeature", @@ -11974,6 +11974,18 @@ "IsNullable": false, "Default": "Auto" }, + { + "Name": "UnbalancedSets", + "Type": "Bool", + "Desc": "Use for multi-class classification when training data is not balanced", + "Aliases": [ + "us" + ], + "Required": false, + "SortOrder": 150.0, + "IsNullable": false, + "Default": false + }, { "Name": "UseSoftmax", "Type": "Bool", @@ -12020,7 +12032,7 @@ "Required": false, "SortOrder": 150.0, "IsNullable": false, - "Default": "Error" + "Default": "Default" }, { "Name": "MaximumBinCountPerFeature", @@ -12517,7 +12529,7 @@ "Required": false, "SortOrder": 150.0, "IsNullable": false, - "Default": "NormalizedDiscountedCumulativeGain" + "Default": "Default" }, { "Name": "MaximumBinCountPerFeature", @@ -12975,7 +12987,7 @@ "Required": false, "SortOrder": 150.0, "IsNullable": false, - "Default": "RootMeanSquaredError" + "Default": "Default" }, { "Name": "MaximumBinCountPerFeature", diff --git a/version.txt b/version.txt index 1cc5f657..867e5243 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.1.0 \ No newline at end of file +1.2.0 \ No newline at end of file