AI STUDIO—零門檻實(shí)現(xiàn)AI能力
隨著AI技術(shù)的發(fā)展,人類社會正處于火熱的智能化革命之中,而誰能在技術(shù)革命浪潮中快速的武裝自己,誰就能掌握未來的機(jī)遇。AI Studio正屬于那一類幫助中小企業(yè),開發(fā)者實(shí)現(xiàn)AI能力的武器庫之一。
如今,AI能力已經(jīng)滲透到各行各業(yè),在語音、圖像以及NLP領(lǐng)域,已獲得了突破性的進(jìn)展和效果,這進(jìn)一步增強(qiáng)了我們對AI技術(shù)的信心,將其推廣到更多的傳統(tǒng)行業(yè)來助力各行業(yè)的發(fā)展。AI技術(shù)可以讓我們釋放更多的腦力和體力,在更需要人類創(chuàng)造力的地方發(fā)揮作用,其他的一切交給AI,相信我,它們做的比我們更好。
對于大型互聯(lián)網(wǎng)企業(yè),形成AI能力只要投錢投人就行了,但是對于中小企業(yè)單獨(dú)構(gòu)建AI能力將耗費(fèi)巨大的精力:招兵買馬,設(shè)備采購,模型開發(fā),系統(tǒng)維護(hù),于是大量的云計(jì)算及建模平臺如雨后春筍般發(fā)展起來,包括AWS(收費(fèi)),Azure(收費(fèi)),阿里云(還是收費(fèi))等。而百度在確立All in AI后做了很多基礎(chǔ)而扎實(shí)的工作,包括最新推出的百度AI Studio一站式開發(fā)平臺:一個囊括了AI教程、代碼環(huán)境、算法算力、數(shù)據(jù)集,并提供免費(fèi)的在線云計(jì)算的一體化編程環(huán)境,在這里,用戶就不必糾結(jié)于復(fù)雜的環(huán)境配置和繁瑣的擴(kuò)展包搜尋,只要有電腦、網(wǎng)絡(luò)以及一顆走進(jìn)深度學(xué)習(xí)的心,打開瀏覽器輸入aistudio.baidu.com,就可以在AI Studio開展深度學(xué)習(xí)項(xiàng)之旅。下面,本文將從功能簡介,實(shí)戰(zhàn)建模及AI能力應(yīng)用等角度聊聊AI Studio。
俗話說,授人以魚不如授人以漁。百度All in AI的戰(zhàn)略里,魚就是諸如基于語音技術(shù)、圖像技術(shù)、視頻技術(shù)、知識圖譜及NLP技術(shù)等形成的人工智能產(chǎn)品服務(wù);而漁就是AI Studio一類的能夠幫助個人開發(fā)者和中小企業(yè)去開發(fā)屬于自己的產(chǎn)品服務(wù),運(yùn)用AI Studio開發(fā)者可以實(shí)現(xiàn)自定義的AI建模能力而無需考慮硬件成本、運(yùn)維成本、人力成本。相比在谷歌云,AWS等云平臺上花錢買計(jì)算資源和存儲空間跑模型來說,AI Studio提供全套免費(fèi)服務(wù)(計(jì)算資源免費(fèi),空間資源免費(fèi),項(xiàng)目托管免費(fèi),視頻教程也免費(fèi))??梢哉fAI Studio從教學(xué)、應(yīng)用、工程上全面推進(jìn)了AI民主化的進(jìn)程,極大的降低了AI技術(shù)跨入門檻。
1.功能簡介
第一次進(jìn)入主頁,首先的感覺這是個類似Kaggle的數(shù)據(jù)競賽平臺,但是仔細(xì)看來,AI Studio強(qiáng)化了工程項(xiàng)目的概念,一大亮點(diǎn)就是AI學(xué)習(xí)項(xiàng)目這個版塊,里面包括大量真實(shí)場景的工程項(xiàng)目(圖像識別,情感分析,個性化推薦等);另一個重要組成就是比賽了,眾所周知構(gòu)建良性循環(huán)的產(chǎn)、學(xué)、研社區(qū)是行業(yè)發(fā)展的重要組成部分,不過目前AI Studio組織的比賽還剛起步,希望后續(xù)比賽多多,大家在這里都能學(xué)到知識,交到朋友,最重要的是,可以在學(xué)習(xí)的同時給自己賺點(diǎn)零用錢花花(笑~)。
Figure 1 AI Studio特性
AI Studio主要功能有項(xiàng)目類的項(xiàng)目大廳,創(chuàng)建項(xiàng)目,樣例項(xiàng)目,共享項(xiàng)目等四大部分,有數(shù)據(jù)科學(xué)比賽,有各種經(jīng)典數(shù)據(jù)集和自定義數(shù)據(jù)集,有詳盡的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的教程及視頻公開課等。下面就簡單的來介紹一下:
Figure 2 AI Studio主要功能
1.1. 菜單欄
1.1.1. 項(xiàng)目大廳
作為AI Studio的主頁,集成百度積累的經(jīng)典AI學(xué)習(xí)項(xiàng)目,自我的項(xiàng)目管理及共享項(xiàng)目列表。整個平臺都是以項(xiàng)目為核心的,也凸顯了AI Studio的定位,就是以技術(shù)及資源輸出幫助個人開發(fā)者,中小企業(yè)快速擁有AI能力以更好的服務(wù)自身業(yè)務(wù)。
1.1.2. 數(shù)據(jù)集
數(shù)據(jù)集包括一些經(jīng)典的公開數(shù)據(jù)集,像MNIST,IMDB,CIFAR10,Penn Treebank,MovieLens等;也包括一些開放的百度數(shù)據(jù)(中文短文本語料,信息抽取數(shù)據(jù))。不過相比Kaggle近萬份數(shù)據(jù)集來說,仍然有很大的發(fā)展空間,但是個人感覺AI Studio的數(shù)據(jù)集還是要比Tianchi的數(shù)據(jù)集規(guī)整很多的。當(dāng)然,用戶也可以上傳自定義數(shù)據(jù)進(jìn)行模型開發(fā)。
1.1.3. 比賽
這個模塊應(yīng)該是所有玩數(shù)據(jù)的人最感興趣的了吧。我之前在Kaggle參加過一些項(xiàng)目,總的來說,Kaggle在比賽這塊做的真的很好,賽制清晰,社區(qū)完善,每次參加比賽都能有很大的提高。相較Kaggle,AI Studio的比賽數(shù)量還不多,不過以上提到的功能都有,另外就是AI Studio提供云端訓(xùn)練平臺,這樣大家的武器庫相對平衡,能夠更公平的進(jìn)行競賽。
Figure 3 AI Studio 比賽頁面
1.2. 創(chuàng)建項(xiàng)目
AI Studio以項(xiàng)目為單元進(jìn)行開發(fā)。創(chuàng)建項(xiàng)目,添加數(shù)據(jù)集,運(yùn)行開發(fā)環(huán)境(notebook kernel),就可以開始構(gòu)建自己的模型進(jìn)行開發(fā)生產(chǎn)了。目前,環(huán)境僅支持Python2.7(期待更多的環(huán)境,Python3,R等),算法框架包括paddlepaddle和sklearn等。
Figure 4 AI Studio創(chuàng)建項(xiàng)目頁面
1.3. 教程&資訊
關(guān)于教程,paddlepaddle關(guān)于機(jī)器學(xué)習(xí)的教程應(yīng)該是中文里最好的,不僅有機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的視頻公開課和教程文檔(獲?。野舜罅康母鱾€方向的深度學(xué)習(xí)實(shí)例,比如圖像分類,詞向量,個性化推薦,情感分析,語義角色標(biāo)注以及機(jī)器翻譯等,不僅從原理層面進(jìn)行深入淺出的講解,更提供模型代碼逐行進(jìn)行實(shí)操,可以說為Everyone can AI提供了強(qiáng)大的后盾。
1.3.1. 樣例工程
樣例工程即是提供的機(jī)器學(xué)習(xí)經(jīng)典應(yīng)用場景及歷屆比賽的notebook,我們可以把各個項(xiàng)目fork到自己的項(xiàng)目下進(jìn)行開發(fā)學(xué)習(xí)。對于急于構(gòu)建AI能力的中小企業(yè),這個模塊是最大福音了,很久之前看過Tensorflow的文檔,只有幾個典型問題的教程及代碼,而這里包括了大量的基于不同場景的AI模型可供拿來即用。
1.3.2. 共享項(xiàng)目
顧名思義,AI Studio也提供項(xiàng)目共享功能供大家互相學(xué)習(xí)。在開源的時代,能夠培育成熟活躍的社區(qū)是平臺發(fā)展的必要因素,這也是Tensorflow能夠在深度學(xué)習(xí)領(lǐng)域中快速推廣的重要原因。
1.3.3. 我的項(xiàng)目
這里是開發(fā)者自己的項(xiàng)目列表,不再贅述。
2.實(shí)戰(zhàn)建模
AI Studio以項(xiàng)目為核心,創(chuàng)建項(xiàng)目的同時可以自定義上傳數(shù)據(jù),也可以選取平臺已有數(shù)據(jù)集;目前,環(huán)境僅支持Python2.7,算法庫包括sklearn和PaddlePaddle。不需要費(fèi)心在開發(fā)環(huán)境上,能夠安心構(gòu)造模型,將建模工程云服務(wù)化應(yīng)該是未來趨勢(能夠方便中小企業(yè)快速構(gòu)建AI能力)。在AI Studio各項(xiàng)目之間是獨(dú)立分配資源的,可以同時調(diào)試多個項(xiàng)目模型,這點(diǎn)還是非常贊的。
我這里創(chuàng)建了兩個共享項(xiàng)目,查看代碼直接fork項(xiàng)目開箱即用(需百度賬號登錄:Titanic項(xiàng)目,個性化推薦項(xiàng)目),代碼詳見附錄及共享項(xiàng)目。第一個項(xiàng)目是最最基礎(chǔ)的數(shù)據(jù)科學(xué)的入門問題titanic預(yù)測是否生還(自主上傳數(shù)據(jù),調(diào)用sklearn隨機(jī)森林模型);第二,利用已有數(shù)據(jù)(MovieLens)及PaddlePaddle構(gòu)建個性化推薦模型。一個小問題就是創(chuàng)建項(xiàng)目后進(jìn)入項(xiàng)目頁面,進(jìn)入運(yùn)行狀態(tài)還需要點(diǎn)擊運(yùn)行項(xiàng)目,這里感覺有點(diǎn)冗余;運(yùn)行的項(xiàng)目就是一個簡潔的notebook開發(fā)環(huán)境,該有的功能都有,個人感覺速度比Kaggle要好很多(不知是不是我的網(wǎng)速渣)。
Figure 5 AI Studio項(xiàng)目界面
開發(fā)環(huán)境主體是由notebook形式組成,熟悉jupyter的同學(xué)可以無縫銜接,比notebook好的一點(diǎn)就是項(xiàng)目的數(shù)據(jù)集都會形成列表,簡單一鍵獲取數(shù)據(jù)路徑。菜單欄更簡潔,基本功能都有,可以保存notebook,有個有意思的地方是在創(chuàng)建項(xiàng)目的時候環(huán)境只能選Python2.7,但這里kernel選擇會出現(xiàn)Python3。
Figure 6 AI Studio開發(fā)頁面
3.群雄逐鹿
作為一站式AI建模開發(fā)平臺AI Studio,如何在強(qiáng)手如云的AI開發(fā)平臺市場殺出一條血路呢?最重要的途徑就是完善比賽社區(qū)的理念,通過PaddlePaddle+AI Studio的方式搶占數(shù)據(jù)科學(xué)競賽這個領(lǐng)域,這里就簡要比較一下幾家數(shù)據(jù)競賽平臺(AI Studio、Kaggle、天池、DataCastle等)。以下將從對開發(fā)者的能力提升,平臺比賽的公平性和比賽收獲等三個方面闡述。
3.1. 能力提升
可以說參加數(shù)據(jù)建模比賽是最好的提升自身能力的方式了,在比賽中,不但能夠了解各行各業(yè)的業(yè)務(wù)形式,數(shù)據(jù)結(jié)構(gòu),也能真實(shí)的驗(yàn)證我們對特征和算法的不同理解,而良好的社區(qū)環(huán)境和代碼共享機(jī)制為自身能力的提升提供了溫床。在這方面,Kaggle因?yàn)槌闪⒆钤缬泻軓?qiáng)的人才和代碼沉淀,投靠Google后,更是愈發(fā)的體現(xiàn)了其中的優(yōu)勢。天池和DataCastle在社區(qū)建設(shè)上也投入了大量的精力,但是與Kaggle還是有較大的差距,不過在中文社區(qū)中應(yīng)該算是佼佼者。AI Studio顯然有后來者的劣勢,不過看過他們的樣例項(xiàng)目,還是很佩服他們在教程和文檔方面的思考,可以說在AI中文教程里AI Studio大踏步的跨入了第一梯隊(duì)。
3.2. 比賽的公平性
這里的公平性體現(xiàn)在兩個方面,第一是賽題的數(shù)據(jù)量要有一定的規(guī)模以防止數(shù)據(jù)量過小導(dǎo)致的模型穩(wěn)定性問題;第二則是計(jì)算資源的公平性,舉個栗子,假如阿里組隊(duì)以P100 GPU集群的算力來參賽的話,恐怕其他人的勝算只能寄托于奇跡了,而對于ImageNet那樣量級的數(shù)據(jù),我們只有PC機(jī)的話恐怕連一次迭代也完成不了,更不要說模型調(diào)優(yōu)了。
在這方面,AI Studio具有極大的優(yōu)勢,平臺不僅免費(fèi)對參賽選手給予計(jì)算資源上的支持,更是提供最新版本的PaddlePaddle供選手調(diào)用。而天池在初賽階段是沒有集群算力支持的,只有進(jìn)入復(fù)賽的選手才會有機(jī)會使用數(shù)加平臺。Kaggle和DataCastle更是沒有平臺的支持。相比來說在比賽資源的公平性上AI Studio的優(yōu)勢巨大。
3.3. 比賽收獲
這里的收獲是只除了能力以外的物質(zhì)方面的獲得,比如現(xiàn)金獎勵和簡歷背書。這兩點(diǎn)對于初入職場的新人還是非常重要的??陀^來講,國際影響力的話Kaggle絕對是No.1,致力于進(jìn)入Google、facebook的同學(xué)最好還是在Kaggle上挑選優(yōu)質(zhì)的比賽;針對國內(nèi)的話,AI Studio、天池和DataCastle在獎金方面相差不大,由于AI Studi推出最晚,所以獎金相對來說高一些。
綜合來看,AI Studio作為數(shù)據(jù)科學(xué)競賽中的新人,背靠百度資源,憑借更加公平的平臺資源輸出,獎勵制度和完善的教程文檔體系將會在未來大規(guī)模的搶占數(shù)據(jù)競賽市場。對開發(fā)者來說,免費(fèi)使用GPU資源,更簡單的開發(fā)流程已經(jīng)是很大的誘惑了。
4.百度AI戰(zhàn)略
身處AI圈,對各家的AI產(chǎn)品戰(zhàn)略比較感興趣,最近有意思的事情就是Baidu Create 2018了,會上,李彥宏的AI夢完成了從All In AI到Everyone Can AI的升華。發(fā)布的AI產(chǎn)品從自動駕駛巴士“阿波龍”到百度自主研發(fā)的云端AI 芯片“昆侖”,再到兩大AI生態(tài)平臺DuerOS3.0、Apollo3.0,可以說百度在AI的布局已經(jīng)從稚嫩走向成熟,以多兵種合成集團(tuán)軍的面貌展示在世界人工智能的舞臺。
百度的AI戰(zhàn)略重在開放,強(qiáng)調(diào)技術(shù)賦能。
根據(jù)百度的說法, 目前已經(jīng)形成了以行業(yè)應(yīng)用為牽引,AI技術(shù)產(chǎn)品服務(wù)為動力,AI基礎(chǔ)平臺服務(wù)為核心的生態(tài)閉環(huán)(AI開放平臺)。從百度公開的資料上看, ,百度已經(jīng)將AI服務(wù)應(yīng)用于智慧零售,金融科技,商業(yè)地產(chǎn),企業(yè)服務(wù),智能硬件,教育培訓(xùn)等各行各業(yè)。比如說智慧零售, 百度提供基礎(chǔ)能力, 合作伙伴進(jìn)行集成和落地, 將人臉識別,人體分析,圖像識別,大數(shù)據(jù)分析研判等服務(wù)賦能給線下門店,商場超市,各大品牌商等零售業(yè)態(tài),有效提升了商業(yè)效率及利潤率。在技術(shù)服務(wù)上,百度提供全面的AI能力,包括語音技術(shù)圖像技術(shù),人臉識別,視頻技術(shù),等等等等, 據(jù)說已經(jīng)超過110項(xiàng)能力 在平臺服務(wù)上,百度不僅有Apollo自動駕駛開放平臺和DuerOS對話式開放平臺,也包括像AI Studio囊括AI教程、開發(fā)環(huán)境、算法算力的一站式AI開發(fā)平臺,EasyDL圖像自定義模型構(gòu)建平臺以及基礎(chǔ)的深度學(xué)習(xí)框架PaddlePaddle。
可見,百度在這場智能化革命中=不但醞釀已久,而且已經(jīng)結(jié)出了不少果實(shí)。
5.總結(jié)
AI Studio是一個基于PaddlePaddle的集成了大量數(shù)據(jù)集、經(jīng)典樣例項(xiàng)目及比賽項(xiàng)目的云計(jì)算建模平臺,也是一個機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的交流社區(qū)。AI Studio最大限度的解放了數(shù)據(jù)科學(xué)家需要環(huán)境配置的煩惱,在云端集成計(jì)算資源,項(xiàng)目管理,代碼管理,比賽等多種功能,形成一站式兼顧學(xué)習(xí)和工作的建模平臺。而且AI Studio提供計(jì)算資源,空間資源,視頻公開課都是免費(fèi)的!免費(fèi)的!免費(fèi)的!(所謂重要的事情說三遍)。最后,期待一下的更多比賽的推出。
參考文獻(xiàn)
- http://aistudio.baidu.com
- http://ai.baidu.com/
- http://www.paddlepaddle.org/
- http://ai.baidu.com/paddlepaddle
附錄
- # 查看當(dāng)前掛載的數(shù)據(jù)集目錄
- !ls /home/aistudio/data/
- # 查看個人持久化工作區(qū)文件
- !ls /home/aistudio/work/
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- %matplotlib inline
- # titanic problem
- # 數(shù)據(jù)集是經(jīng)典的機(jī)器學(xué)習(xí)問題,titanic的原始數(shù)據(jù),以下是在AI Studio平臺上Python2.7環(huán)境,完整的從數(shù)據(jù)清洗,數(shù)據(jù)處理,特征工程,到運(yùn)用
- # 隨機(jī)森林構(gòu)建模型
- # 最簡單的模型開發(fā)流程如下
- # - 數(shù)據(jù)讀入
- # - 特征工程
- # - 數(shù)據(jù)分割
- # - 模型訓(xùn)練
- # - 模型評估
- # - 交叉檢驗(yàn)
- ## 數(shù)據(jù)讀入
- # 創(chuàng)建項(xiàng)目的時候讀入數(shù)據(jù),通過ls /home/aistudio/data/查看數(shù)據(jù)集目錄,添加數(shù)據(jù)。
- data_train = pd.read_csv('/home/aistudio/data/data188/train.csv')
- data_test = pd.read_csv('/home/aistudio/data/data188/test.csv')
- data_train.sample(3)
- ## 特征工程
- ### 數(shù)據(jù)清洗及特征處理
- # 對特征進(jìn)行如下處理:
- # - 對特征Age進(jìn)行分箱離散化處理(simplify_ages)
- # - 提取特征Cabin進(jìn)行類別化處理(simplify_cabins)
- # - 對特征Fare進(jìn)行分箱離散化處理(simplify_fares)
- # - 對特征名字進(jìn)行處理(format_name)
- # - 刪掉意義不大的特征(drop_features)
- def simplify_ages(df):
- df.Age = df.Age.fillna(-0.5)
- bins = (-1, 0, 5, 12, 18, 25, 35, 60, 120)
- group_names = ['Unknown', 'Baby', 'Child', 'Teenager', 'Student', 'Young Adult', 'Adult', 'Senior']
- categories = pd.cut(df.Age, bins, labels=group_names)
- df.Age = categories
- return df
- def simplify_cabins(df):
- df.Cabin = df.Cabin.fillna('N')
- df.Cabin = df.Cabin.apply(lambda x: x[0])
- return df
- def simplify_fares(df):
- df.Fare = df.Fare.fillna(-0.5)
- bins = (-1, 0, 8, 15, 31, 1000)
- group_names = ['Unknown', '1_quartile', '2_quartile', '3_quartile', '4_quartile']
- categories = pd.cut(df.Fare, bins, labels=group_names)
- df.Fare = categories
- return df
- def format_name(df):
- df['Lname'] = df.Name.apply(lambda x: x.split(' ')[0])
- df['NamePrefix'] = df.Name.apply(lambda x: x.split(' ')[1])
- return df
- def drop_features(df):
- return df.drop(['Ticket', 'Name', 'Embarked'], axis=1)
- def transform_features(df):
- df = simplify_ages(df)
- df = simplify_cabins(df)
- df = simplify_fares(df)
- df = format_name(df)
- df = drop_features(df)
- return df
- data_train = transform_features(data_train)
- data_test = transform_features(data_test)
- data_train.head()
- ### 特征處理
- # - 篩選可用的特征
- # - 對類別特征做數(shù)值化處理
- from sklearn import preprocessing
- def encode_features(df_train, df_test):
- features = ['Fare', 'Cabin', 'Age', 'Sex', 'Lname', 'NamePrefix']
- df_combined = pd.concat([df_train[features], df_test[features]])
- for feature in features:
- le = preprocessing.LabelEncoder()
- le = le.fit(df_combined[feature])
- df_train[feature] = le.transform(df_train[feature])
- df_test[feature] = le.transform(df_test[feature])
- return df_train, df_test
- data_train, data_test = encode_features(data_train, data_test)
- data_train.head()
- ## 數(shù)據(jù)分割
- # 對數(shù)據(jù)集進(jìn)行訓(xùn)練集和測試集的分割
- from sklearn.model_selection import train_test_split
- X_all = data_train.drop(['Survived', 'PassengerId'], axis=1)
- y_all = data_train['Survived']
- num_test = 0.20
- X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, test_size=num_test, random_state=23)
- ## 模型訓(xùn)練
- # 選取隨機(jī)森林模型,利用網(wǎng)格搜索進(jìn)行參數(shù)調(diào)優(yōu)。
- from sklearn.ensemble import RandomForestClassifier
- from sklearn.metrics import make_scorer, accuracy_score
- from sklearn.model_selection import GridSearchCV
- # Choose the type of classifier.
- clf = RandomForestClassifier()
- # Choose some parameter combinations to try
- parameters = {'n_estimators': [4, 6, 9],
- 'max_features': ['log2', 'sqrt','auto'],
- 'criterion': ['entropy', 'gini'],
- 'max_depth': [2, 3, 5, 10],
- 'min_samples_split': [2, 3, 5],
- 'min_samples_leaf': [1,5,8]
- }
- # Type of scoring used to compare parameter combinations
- acc_scorer = make_scorer(accuracy_score)
- # Run the grid search
- grid_obj = GridSearchCV(clf, parameters, scoring=acc_scorer)
- grid_obj = grid_obj.fit(X_train, y_train)
- # Set the clf to the best combination of parameters
- clf = grid_obj.best_estimator_
- # Fit the best algorithm to the data.
- clf.fit(X_train, y_train)
- ## 模型評估
- # 用準(zhǔn)確率評估模型效果
- predictions = clf.predict(X_test)
- print(accuracy_score(y_test, predictions))
- ## 交叉檢驗(yàn)
- # KFold
- from sklearn.cross_validation import KFold
- def run_kfold(clf):
- kf = KFold(891, n_folds=10)
- outcomes = []
- fold = 0
- for train_index, test_index in kf:
- fold += 1
- X_train, X_test = X_all.values[train_index], X_all.values[test_index]
- y_train, y_test = y_all.values[train_index], y_all.values[test_index]
- clf.fit(X_train, y_train)
- predictions = clf.predict(X_test)
- accuracy = accuracy_score(y_test, predictions)
- outcomes.append(accuracy)
- print("Fold {0} accuracy: {1}".format(fold, accuracy))
- mean_outcome = np.mean(outcomes)
- print("Mean Accuracy: {0}".format(mean_outcome))
- run_kfold(clf)
- ids = data_test['PassengerId']
- predictions = clf.predict(data_test.drop('PassengerId', axis=1))
- output = pd.DataFrame({ 'PassengerId' : ids, 'Survived': predictions })
- # output.to_csv('titanic-predictions.csv', index = False)
- output