Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Gani Nazirov Newsgroups: comp.lang.python.announce Subject: Introducing NimbusML - experimental Python bindings for ML.NET Date: Fri, 2 Nov 2018 21:38:27 +0000 Lines: 248 Approved: python-announce-list@python.org Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Trace: news.uni-berlin.de olGuyZL4O92GkZP3owZ84gQQ8lPvognPMtGiRlX3C+qg== Return-Path: X-Original-To: python-announce-list@python.org Delivered-To: python-announce-list@mail.python.org X-Spam-Status: OK 0.008 X-Spam-Evidence: '*H*': 0.98; '*S*': 0.00; 'yet.': 0.02; 'yesterday': 0.04; 'binary': 0.05; 'components:': 0.05; 'deployed': 0.05; 'apis': 0.07; '(64': 0.09; 'bindings': 0.09; 'conventions': 0.09; 'docs.': 0.09; 'examples:': 0.09; 'experimental': 0.09; 'learner': 0.09; 'macos': 0.09; 'matches': 0.09; 'pandas': 0.09; 'regression': 0.09; 'clustering': 0.16; 'float:none;': 0.16; 'pipelines': 0.16; 'subject:Introducing': 0.16; 'tensorflow': 0.16; 'test_data': 0.16; 'url-ip:23.34.189.170/32': 0.16; 'url- ip:23.34.189/24': 0.16; 'url:%5b': 0.16; 'url:%5d': 0.16; 'url:api': 0.16; 'url:dotnet': 0.16; 'python': 0.17; 'url:%25': 0.17; 'install': 0.19; 'subject:Python': 0.20; '3.7': 0.20; 'linux,': 0.20; 'pip': 0.20; 'input': 0.22; 'machine': 0.22; 'installed': 0.22; 'scikit-learn': 0.25; 'skip:p 40': 0.25; 'announce': 0.26; 'fit': 0.26; 'windows': 0.26; 'url:view': 0.28; 'installation': 0.29; 'url-ip:207/8': 0.29; 'import': 0.29; 'load': 0.31; 'skip:u 20': 0.31; 'url:%3a': 0.31; 'url- ip:192.30/16': 0.31; 'skip:f 50': 0.31; 'transform': 0.31; 'url:%3f': 0.31; '3.6': 0.33; 'columns': 0.33; 'url:samples': 0.33; 'test': 0.33; 'run': 0.33; 'getting': 0.33; 'framework': 0.35; 'ubuntu': 0.35; 'supported': 0.35; 'open': 0.36; 'but': 0.36; 'allows': 0.37; 'efficient': 0.37; 'skip:b 30': 0.37; 'thank': 0.37; 'source': 0.37; 'to:addr:python-announce-list': 0.38; 'url-ip:192.30.253.112/32': 0.38; 'url- ip:192.30.253.113/32': 0.38; 'url-ip:192.30.253/24': 0.38; 'url:%4': 0.38; 'url:github': 0.38; 'skip:s 30': 0.38; 'image': 0.38; 'example': 0.38; '(see': 0.38; 'received:prod.outlook.com': 0.39; 'skip:f 30': 0.40; 'skip:g 40': 0.40; 'url:%3': 0.40; 'skip:t 30': 0.60; 'through': 0.60; 'url:0': 0.61; 'results': 0.61; 'tap': 0.61; 'excited': 0.63; 'skip:o 10': 0.63; 'within': 0.64; 'here': 0.64; 'skip:n 10': 0.66; 'url:i': 0.66; 'complete': 0.66; 'url:%20': 0.70; '(an': 0.70; 'here<>': 0.70; 'sample': 0.70; 'notebook': 0.75; 'url-ip:lookup error': 0.75; 'analysis': 0.78; 'click': 0.78; 'href=""': 0.80; 'interop': 0.84; 'logistic': 0.84; 'noreferrer"': 0.84; 'parity': 0.84; 'pipeline': 0.84; 'samples.': 0.84; 'url-ip:207.46/16': 0.84; 'url:master': 0.84; 'url:overview': 0.84; 'available:': 0.91; 'url:%2b': 0.93; 'trained': 0.95; 'ranking': 0.96 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pIb17NHuOI5ss0K0sEn70Zsk8u8lr5sbQheJsWHoIYE=; b=jbR/t2map+ScpUrzmhZOqVd8Yy64Tu4hezs+sf7vhDAm28d6sjjyV1AglCaRz3KooQQuB1Ix3CfMFJ6wzAcYWFo1Lxhl6LinC+VT8Xv993ppYXnL1wEUEGC7Js8NiaGhgm2dnkE1SIfYHPI/vlWHUY7kIVBHIR8GGUk3JMEfKws= Thread-Topic: Introducing NimbusML - experimental Python bindings for ML.NET Thread-Index: AQHUcvRhkGHnwUI4OEudRjDyc6lIDw== Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [2001:4898:80e8:7:24db:8e22:ff8a:6209] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DM5PR2101MB1078; 6:9Jsnen6u5RF7NI2KooyCE6O+oDqB5t0BHcGaywCCnOylgmaRTWQRzDKamYACI/Zwg69W/7UNog9swyrcslbRCiVPjqHR3xZE8PJrT/jghodlXtqMd+zHi8OsCDz0mEjfuk/Ck7xQmhatf7rvTQzbmaAj+2xqFlSdc2hCIBhCrHx76RaXR3vYbwVjjwO6tp/pZdtC/Ghh+QVGn4K97M0Sd7P9S5w2GfopATNAuVsRgCp/BAb3OVEcicQeq0Oo4qxueZ5plHtmYTzyD3QZCuK+DdTg01LSkB0O11BdKNG7TmhkOyH4NUDYPbJtg7ixdBSrb/nf14hdqB1KRDv/XdHFSUEizRO97k5iVYeRniePPNrWkJZxg7K8tsEpesZEev1Bd4f04f2naxXmnO+wfjDmOfxDnR7XG406ZMrR3x23cn0Q5MHHaIGQnnolY4SKcUFlvkPR12uR7hiYtB5EqmFViQ==; 5:dtIO1enVm8dBXzj7VL6M8caoP566ihc13PHBI75EqASWS+wgH/mvkhQpX4Pj0z2YUwj9RAW1Jt5rpNz1xy7Z7RYq5zT7toBZjmI6aMs08lg0Khds662ecUe1LdFqY+aOLTZ/iK1CXPCWLESPZUdIodLjl1oYCqutEv9+Ku/hz+M=; 7:dLc3kwt1wzTfL6ZyeaA5U7hLogwh7ck1401QY3A/m1R3oy6keLJRhp6ys+8PmEEWtuL2+toND3a1XHBMB82Dyz6XPFCV1Z5d4NLVyhIhOsDtcJ4HKqyMGPxpMJcppe8ftZZj4zUFW/yRbBueQ1Ha8A== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 02b2ca25-7cb6-4356-2b22-08d6410b86c1 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(4534185)(4627221)(201703031133081)(201702281549075)(5600074)(711020)(4618075)(2017052603328)(7193020); SRVR:DM5PR2101MB1078; x-ms-traffictypediagnostic: DM5PR2101MB1078: authentication-results: spf=none (sender IP is ) smtp.mailfrom=ganaziro@microsoft.com; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(278428928389397)(148322886591682)(166708455590820)(219752817060721)(189930954265078)(28532068793085); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(8220035)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231382)(944501410)(52105095)(2018427008)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201708071742011)(7699051)(76991095); SRVR:DM5PR2101MB1078; BCL:0; PCL:0; RULEID:; SRVR:DM5PR2101MB1078; x-forefront-prvs: 08444C7C87 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(366004)(39860400002)(396003)(136003)(346002)(376002)(199004)(189003)(6506007)(22452003)(6606003)(102836004)(2900100001)(6916009)(7696005)(8676002)(81166006)(8936002)(8990500004)(186003)(81156014)(99286004)(476003)(5660300001)(6116002)(71190400001)(71200400001)(316002)(10090500001)(68736007)(486006)(86612001)(86362001)(2351001)(19627405001)(6436002)(53946003)(97736004)(5640700003)(53936002)(2906002)(10290500003)(55016002)(46003)(106356001)(105586002)(6306002)(9686003)(236005)(54896002)(10126004)(53336002)(33656002)(74316002)(25786009)(508600001)(2501003)(14454004)(256004)(7736002)(606006)(579004); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR2101MB1078; H:DM5PR2101MB0805.namprd21.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microsoft.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 5ADaohI4t5kddzS83PoO/E8VdrGjszSsH+TWDpiebBgpuddy6Xsi/Ruo5vg9AlHSjGCpSPQ2abvNrCNkVzAIAQWS6nNvaTiikFDjAQkGvmd/DgAi1P4j5WSQNnDAe5sqlbwCR+DPWin+ek6XV682XaRP2jddV8DyEeMkxalV2oy9JnOxuOThHKk6W7m08Wwep2mG2I2RLUlnzqjlDWqIkx3shPcUfIRAi/VENE2FAN3rPikihMOzJ+qgugE5P20YELR1s/s05wgQT+5EQv2q8320ue6ykxra+4LJjpx5mpWQa9o9wIb9kqhUmgtcr1SQRaiSC24KCtcipUGdlXcn/l9pU/mfeRRZgPp0xpqnvN8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02b2ca25-7cb6-4356-2b22-08d6410b86c1 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Nov 2018 21:38:27.9124 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR2101MB1078 X-Mailman-Approved-At: Mon, 05 Nov 2018 08:04:39 -0500 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: python-announce-list@python.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Announcement-only list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: Xref: csiph.com comp.lang.python.announce:3006 We are excited to announce that yesterday we released and open sourced Nimb= usML ! This project provides experimental Python bindings for ML= .NET (an open source and cross-platform machine lear= ning framework for .NET) NimbusML allows you to build ML.NET pipelines in Python and also integrate = them into Scikit-Learn pipelines. Highlights =B7 Cross-platform: NimbusML is supported on Mac, Linux, and Window= s. =B7 Efficient interop with Scikit-learn/Pandas: NimbusML can accept= Pandas dataframes as input and its components can also be used within Scik= it-learn pipelines. =B7 Majority of ML.NET components are available: Most ML.NET compon= ents can be used through NimbusML. =B7 Performance parity with ML.NET: When using only NimbusML compon= ents (loaders, transforms, scorers, and evaluators), NimbusML performance m= atches ML.NET performance. =B7 Familiar APIs for Scikit-learn users: NimbusML adheres to exist= ing Scikit-learn conventions but also introduces some new concepts such as = how to work with multiple columns in the pipelines. =B7 Open-source: NimbusML will be built in the open and we encourag= e any non-confidential issues/questions to be added on GitHub. Please let u= s know if you are interested in contributing. =B7 Interop with ML.NET models: models trained in NimbusML can be d= eployed in .NET applications using ML.NET (see here for an example). Click here to view the NimbusML repo. Click here to view the NimbusML samples. Click here to view the NimbusML docs. Installation NimbusML can be installed using pip: pip install nimbusml You can run a quick test with: python -m nimbusml.examples.FastLinearClassifier NimbusML has been tested on Windows 10, MacOS 10.13, Ubuntu 14.04, Ubuntu 1= 6.04, Ubuntu 18.04, CentOS 7, and RHEL 7. NimbusML requires Python 2.7, 3.5, or 3.6 (64 bit). Python 3.7 is not suppo= rted yet. Getting Started Documentation can be found here. Sample noteb= ooks can be found here. A few examples: =B7 Twitter Sentiment Analysis =B7 Ranking with LightGBM =B7 Image clustering using a TensorFlow model =B7 Binary classification with Logistic Regression =B7 Save and load models (and use NimbusML models in ML.NET) Sentiment analysis example with NimbusML components: from nimbusml import Pipeline, FileDataStream from nimbusml.datasets import get_dataset from nimbusml.ensemble import FastTreesBinaryClassifier from nimbusml.feature_extraction.text import NGramFeaturizer train_file =3D get_dataset('gen_twittertrain').as_filepath() test_file =3D get_dataset('gen_twittertest').as_filepath() train_data =3D FileDataStream.read_csv(train_file, sep=3D'\t') test_data =3D FileDataStream.read_csv(test_file, sep=3D'\t') pipeline =3D Pipeline([ # nimbusml pipeline NGramFeaturizer(columns=3D{'Features': ['Text']}), FastTreesBinaryClassifier(feature=3D['Features'], label=3D'Label') ]) # fit and predict pipeline.fit(train_data) results =3D pipeline.predict(test_data) A complete notebook for this example can be found here. Sentiment analysis example with NimbusML + Scikit-Learn components: from nimbusml.datasets import get_dataset from nimbusml.ensemble import FastTreesBinaryClassifier from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import TfidfVectorizer import pandas as pd train_file =3D get_dataset('gen_twittertrain').as_filepath() test_file =3D get_dataset('gen_twittertest').as_filepath() train_data =3D pd.read_csv(train_file, sep=3D'\t') test_data =3D pd.read_csv(test_file, sep=3D'\t') pipeline =3D Pipeline([ # sklearn pipeline ('tfidf', TfidfVectorizer()), # sklearn transform ('clf', FastTreesBinaryClassifier()) # nimbusml learner ]) # fit and predict pipeline.fit(train_data["Text"], train_data["Label"]) results =3D pipeline.predict(test_data["Text"]) A complete notebook for this example can be found here. Thank you! -ML.NET Team