中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
僅需10分鐘:開啟你的機(jī)器學(xué)習(xí)之路

作者:Tirmidzi Faizal Aflahi

機(jī)器之心編譯

參與:李詩萌、杜偉

機(jī)器學(xué)習(xí)之路雖漫漫無垠,但莘莘學(xué)子依然紛紛投入到機(jī)器學(xué)習(xí)的洪流中。如何更有效地開始機(jī)器學(xué)習(xí)呢?所謂「八仙過海,各顯神通」,本文作者以Python語言為工具進(jìn)行機(jī)器學(xué)習(xí),并以Kaggle競賽中的泰坦尼克號項(xiàng)目進(jìn)行詳細(xì)解讀。跟著小編來看看吧!

隨著行業(yè)內(nèi)機(jī)器學(xué)習(xí)的崛起,能夠幫用戶快速迭代整個(gè)過程的工具變得至關(guān)重要。Python,機(jī)器學(xué)習(xí)技術(shù)領(lǐng)域冉冉升起的一顆新星,往往是帶你走向成功的首選。因此,用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)的指南是非常必要的。

用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)的介紹

那么為什么是 Python 呢?根據(jù)我的經(jīng)驗(yàn),Python 是最容易學(xué)習(xí)的編程語言之一?,F(xiàn)在需要快速迭代整個(gè)過程,與此同時(shí),數(shù)據(jù)科學(xué)家不需要深入了解這種語言,因?yàn)樗麄兛梢钥焖僬莆账?/p>

有多容易呢?

for anything in the_list:
    print(anything)

就這么容易。Python 的語法和英語(或人類語言,而不是機(jī)器語言)語法關(guān)系密切。在 Python 的語法中沒有愚蠢的大括號造成的困擾。我有一個(gè)從事質(zhì)量保證(Quality Assurance)工作的同事,雖然不是軟件工程師,但她可以在一天內(nèi)寫出產(chǎn)品級的 Python 代碼。(真的?。?/p>

我將在下文中介紹幾個(gè)基于 Python 的庫。作為數(shù)據(jù)分析師和數(shù)據(jù)科學(xué)家,我們可以利用他們的杰作來幫助我們完成任務(wù)。這些不可思議的庫是用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)的必備工具。

NumPy

這是一個(gè)非常有名的數(shù)據(jù)分析庫。從計(jì)算數(shù)據(jù)分布的中位數(shù),到處理多維數(shù)組,NumPy 都可以幫你完成。

Pandas

這是用來處理 CSV 文件的。當(dāng)然了,你還需要處理一些表格、查看統(tǒng)計(jì)數(shù)據(jù)等,那 Pandas 就是可以滿足你的需求的工具。

Matplotlib

把數(shù)據(jù)存儲在 Pandas 的數(shù)據(jù)框后,你可能需要做一些可視化來理解數(shù)據(jù)的更多信息。畢竟一圖抵千言。

Seaborn

這是另一個(gè)可視化工具,但這個(gè)工具更側(cè)重于統(tǒng)計(jì)結(jié)果的可視化,比如直方圖、餅圖、曲線圖或相關(guān)性表等。

Scikit-Learn

這是用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)的終極工具。所謂用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)指的就是這個(gè)——Scikit-Learn。所有你需要的從算法到提升的內(nèi)容都能在這里找到。

Tensorflow 和 Pytorch

針對這兩個(gè)工具我不會說太多。但如果你對深度學(xué)習(xí)感興趣的話,可以詳細(xì)了解一下,它們值得你花時(shí)間去學(xué)習(xí)。(我下次會再寫一篇關(guān)于深度學(xué)習(xí)的教程,敬請期待?。?/p>

Python 機(jī)器學(xué)習(xí)項(xiàng)目

當(dāng)然,只是閱讀和學(xué)習(xí)是沒法讓你達(dá)成心愿的。你需要實(shí)際練習(xí)。正如我博客中所說的,如果你沒有深入數(shù)據(jù)的話,那學(xué)習(xí)這些工具將毫無意義。因此,我在這里介紹一個(gè)可以輕松找到 Python 機(jī)器學(xué)習(xí)項(xiàng)目的地方。

博客地址:https://thedatamage.com/

Kaggle 是一個(gè)可以直接研究數(shù)據(jù)的平臺。你可以在這個(gè)平臺中解決一些項(xiàng)目,并達(dá)到真的擅長機(jī)器學(xué)習(xí)的地步。你可能更感興趣另外一些東西——Kaggle 舉辦的機(jī)器學(xué)習(xí)競賽,獎金高達(dá) 100,000 美元。你可能會想著碰碰運(yùn)氣,哈哈。

Kaggle:https://www.kaggle.com/

但最重要的并不是錢——你真的可以在這里找到用 Python 實(shí)現(xiàn)的機(jī)器學(xué)習(xí)項(xiàng)目。你可以試著完成很多項(xiàng)目。但如果你是個(gè)新手,你可能會想?yún)⒓舆@項(xiàng)競賽。

我們將在后面的教程中用到一個(gè)示例項(xiàng)目:

泰坦尼克:從災(zāi)難中進(jìn)行機(jī)器學(xué)習(xí)(https://www.kaggle.com/c/titanic)

這就是眾所周知的泰坦尼克號。這是一場發(fā)生在 1912 年的災(zāi)難,這場災(zāi)難波及到的乘客和機(jī)組成員共 2224 人,其中 1502 人遇難死亡。這項(xiàng) Kaggle 競賽(或者說是教程)提供了災(zāi)難中的真實(shí)數(shù)據(jù)。你的任務(wù)是解釋這些數(shù)據(jù),并預(yù)測出災(zāi)難中哪些人會活下來,哪些人不會。

用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)的教程

在深入了解泰坦尼克號的數(shù)據(jù)之前,我們要先安裝一些必需的工具。

首先當(dāng)然是 Python。第一次安裝 Python 需要從官網(wǎng)上安裝。你要安裝 3.6 以上的版本,這樣才能跟最新版本的庫保持同步。

Python 官方網(wǎng)站:https://www.python.org/downloads/

然后可以用 Python 的 pip 安裝所有的庫。你剛剛下載的 Python 發(fā)行版會自動安裝 pip。

需要的其他工具都可以用 pip 安裝。打開終端、命令行或 PowerShell,命令如下:

pip install numpy
pip install pandas
pip install matplotlib
pip install seaborn
pip install scikit-learn
pip install jupyter

看起來一切都運(yùn)行良好。但是等一下,什么叫 jupyter?jupyter 表示 Julia、Python 和 R,因此它實(shí)際上是 Jupytr。但這個(gè)單詞看起來太奇怪了,所以他們把它變成了 Jupyter。這是一個(gè)很有名的筆記本,你可以在這個(gè)筆記本上寫交互式的 Python 代碼。

只要在終端中輸入 jupyter notebook,就可以打開如下圖所示的瀏覽器頁面:

你可以把代碼寫在綠色矩形中,而且可以交互式地編寫并評價(jià) Python 代碼。

現(xiàn)在你已經(jīng)安裝了所有的工具。我們開始吧!

數(shù)據(jù)探索

探索數(shù)據(jù)是第一步。你需要從 Kaggle 的 Titanic 頁面下載數(shù)據(jù),然后將下載的數(shù)據(jù)放到你啟動 Jupyter 筆記本的文件夾中。

數(shù)據(jù)下載地址:https://www.kaggle.com/c/titanic/data

然后導(dǎo)入必要的庫:

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

載入數(shù)據(jù):

train_df=pd.read_csv('train.csv')
train_df.head()

輸出如下:

這就是我們的數(shù)據(jù)。它有下面幾列:

  • PassengerId,乘客的標(biāo)識符;

  • Survived,他(她)是否存活了下來;

  • Pclass,艙室類別,也許 1 表示經(jīng)濟(jì)艙,2 表示商務(wù)艙,3 表示頭等艙;

  • Name,乘客的名字;

  • Sex,性別;

  • Age,年齡;

  • SibSp,即兄弟姐妹(siblings)或配偶(spouses),表示在船上的兄弟姐妹以及配偶的數(shù)目;

  • Parch,即父母(Parents)或子女(Children),表示在船上的父母和子女的數(shù)目;

  • Ticket,船票詳情;

  • Cabin,艙號,NaN 表示未知;

  • Embarked,登船的起始地,S 表示南安普頓(Southampton),Q 表示皇后鎮(zhèn)(Queenstown),C 表示瑟堡(Cherbourg)

在探索數(shù)據(jù)時(shí),常常會遇到數(shù)據(jù)缺失的問題。我們來看一下

def missingdata(data):
    total = data.isnull().sum().sort_values(ascending = False)
    percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False)
    ms=pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
    ms= ms[ms['Percent'] > 0]
    f,ax =plt.subplots(figsize=(8,6))
    plt.xticks(rotation='90')
    fig=sns.barplot(ms.index, ms['Percent'],color='green',alpha=0.8)
    plt.xlabel('Features', fontsize=15)
    plt.ylabel('Percent of missing values', fontsize=15)
    plt.title('Percent missing data by feature', fontsize=15)
    return ms
missingdata(train_df)

我們會看到這樣的結(jié)果:

艙號、年齡以及登船地的數(shù)據(jù)都有一些缺失值,而艙號信息有大量的缺失。我們需要對它們進(jìn)行處理,也就是所謂的數(shù)據(jù)清理(Data Cleaning)。

數(shù)據(jù)清理

我們 90% 的時(shí)間都花在這上面。我們要針對每一個(gè)機(jī)器學(xué)習(xí)項(xiàng)目進(jìn)行大量的數(shù)據(jù)清理。當(dāng)數(shù)據(jù)清理干凈時(shí),我們就可以輕松地進(jìn)行下一步了,什么都不用擔(dān)心。

數(shù)據(jù)清理中最常用的技術(shù)是填充缺失數(shù)據(jù)。你可以用眾數(shù)、平均數(shù)或中位數(shù)來填充缺失數(shù)據(jù)。選擇這些數(shù)據(jù)沒有絕對規(guī)則,你可以一一嘗試,然后看看它們的表現(xiàn)如何。但是根據(jù)經(jīng)驗(yàn)來講,分類數(shù)據(jù)只能用眾數(shù),連續(xù)數(shù)據(jù)可以用中位數(shù)或平均數(shù)。所以我們用眾數(shù)來填充登船地?cái)?shù)據(jù),用中位數(shù)來填充年齡數(shù)據(jù)。

train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace = True)
train_df['Age'].fillna(train_df['Age'].median(), inplace = True)

接下來的重要操作是刪除數(shù)據(jù),尤其針對大量缺失的數(shù)據(jù)。我們針對艙號數(shù)據(jù)進(jìn)行以下處理:

drop_column = ['Cabin']
train_df.drop(drop_column, axis=1, inplace = True)

現(xiàn)在檢查一下清理過的數(shù)據(jù)。

print('check the nan value in train data')
print(train_df.isnull().sum())

完美!沒有任何缺失數(shù)據(jù)了!這表示數(shù)據(jù)已經(jīng)清理干凈了。

特征工程

現(xiàn)在數(shù)據(jù)已經(jīng)清理干凈了。接下來我們要進(jìn)行特征工程。

特征工程基本上就是根據(jù)當(dāng)前可用數(shù)據(jù)發(fā)現(xiàn)特征或數(shù)據(jù)的技術(shù)。有幾種方法可以實(shí)現(xiàn)這種技術(shù)。在很多時(shí)候這都是常識。

我們以登船地?cái)?shù)據(jù)為例——這是用 Q、S 或 C 填充的數(shù)據(jù)。Python 庫不能處理這個(gè),因?yàn)樗荒芴幚頂?shù)字。所以你需要用所謂的獨(dú)熱向量化(One Hot Vectorization)來處理,它可以把一列變成三列。用 0 或 1 填充 Embarked_Q、Embarked_S 和 Embarked_C,來表示這個(gè)人是不是從這個(gè)港口出發(fā)的。

再以 SibSp 和 Parch 為例。這兩列沒有什么有趣的,但是你可能會想知道某個(gè)乘客有多少家人登上了這艘船。如果家人多的話可能會增加生存幾率,因?yàn)樗麄兛梢曰ハ鄮椭牧硪粋€(gè)角度說,單獨(dú)登船的乘客可能很難生存下去。

因此你可以創(chuàng)建新的一列,這一列是成員數(shù)量(family size),family size = SibSp Parch 1(乘客自己)。

最后一個(gè)例子是以 bin 列為例的。由于你認(rèn)為很難區(qū)分具有相似值的事物,所以這種操作創(chuàng)建了值范圍(ranges of values),然后將多個(gè)值組合在一起。比如,5 歲和 6 歲的乘客之間有顯著的差異嗎?或者 45 和 46 歲的人之間有顯著的差異嗎?

這就是創(chuàng)建 bin 列的原因。也許就年齡而言,我們可以創(chuàng)建 4 列——幼兒(0~14 歲)、青少年(14~20 歲)、成年人(20~40 歲)以及年長的人(40 歲以上)。

編碼如下:

all_data = train_df
for dataset in all_data :
    dataset['FamilySize'] = dataset['SibSp']   dataset['Parch']   1
import re
# Define function to extract titles from passenger names
def get_title(name):
    title_search = re.search(' ([A-Za-z] )\.', name)
    # If the title exists, extract and return it.
    if title_search:
        return title_search.group(1)
    return ''
# Create a new feature Title, containing the titles of passenger names
for dataset in all_data:
    dataset['Title'] = dataset['Name'].apply(get_title)
# Group all non-common titles into one single grouping 'Rare'
for dataset in all_data:
    dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col','Don', 
                                                 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')
    dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')
    dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')
for dataset in all_data:
    dataset['Age_bin'] = pd.cut(dataset['Age'], bins=[0,14,20,40,120], labels=['Children','Teenage','Adult','Elder'])
for dataset in all_data:
    dataset['Fare_bin'] = pd.cut(dataset['Fare'], bins=[0,7.91,14.45,31,120], labels ['Low_fare','median_fare', 'Average_fare','high_fare'])

traindf=train_df
for dataset in traindf:
    drop_column = ['Age','Fare','Name','Ticket']
    dataset.drop(drop_column, axis=1, inplace = True)
drop_column = ['PassengerId']
traindf.drop(drop_column, axis=1, inplace = True)
traindf = pd.get_dummies(traindf, columns = ['Sex','Title','Age_bin','Embarked','Fare_bin'],
                             prefix=['Sex','Title','Age_type','Em_type','Fare_type'])

現(xiàn)在,你已經(jīng)創(chuàng)建完成所有的特征了。接著我們看看這些特征之間的相關(guān)性:

sns.heatmap(traindf.corr(),annot=True,cmap='RdYlGn',linewidths=0.2) #data.corr()-->correlation matrix
fig=plt.gcf()
fig.set_size_inches(20,12)
plt.show()

相關(guān)值接近 1 意味著高度正相關(guān),-1 意味著高度負(fù)相關(guān)。例如,性別為男和性別為女之間就呈負(fù)相關(guān),因?yàn)楸仨殞⒊丝妥R別為一種性別(或另一種)。此外,你還可以看到,除了用特征工程創(chuàng)建的內(nèi)容外,沒有哪兩種是高度相關(guān)的。這證明我們做得對。

如果某些因素之間高度相關(guān)會怎么樣?我們可以刪除其中的一個(gè),新列中的信息并不能給系統(tǒng)提供任何新信息,因?yàn)檫@兩者是完全一樣的。

用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)

現(xiàn)在我們已經(jīng)到達(dá)本教程的高潮——機(jī)器學(xué)習(xí)建模。

from sklearn.model_selection import train_test_split #for split the data
from sklearn.metrics import accuracy_score  #for accuracy_score
from sklearn.model_selection import KFold #for K-fold cross validation
from sklearn.model_selection import cross_val_score #score evaluation
from sklearn.model_selection import cross_val_predict #prediction
from sklearn.metrics import confusion_matrix #for confusion matrix
all_features = traindf.drop('Survived',axis=1)
Targeted_feature = traindf['Survived']
X_train,X_test,y_train,y_test = train_test_split(all_features,Targeted_feature,test_size=0.3,random_state=42)
X_train.shape,X_test.shape,y_train.shape,y_test.shape

Scikit-Learn 庫中有多種算法供你選擇:

  • 邏輯回歸

  • 隨機(jī)森林

  • 支持向量機(jī)

  • K 最近鄰

  • 樸素貝葉斯

  • 決策樹

  • AdaBoost

  • LDA

  • 梯度增強(qiáng)

你可能感到不知所措,想弄清什么是什么。別擔(dān)心,只要將它當(dāng)做「黑箱」對待就好——選一個(gè)表現(xiàn)最好的。(我之后會寫一篇完整的文章討論如何選擇這些算法。)

以我最喜歡的隨機(jī)森林算法為例:

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(criterion='gini', n_estimators=700,
                             min_samples_split=10,min_samples_leaf=1,
                             max_features='auto',oob_score=True,
                             random_state=1,n_jobs=-1)
model.fit(X_train,y_train)
prediction_rm=model.predict(X_test)
print('--------------The Accuracy of the model----------------------------')
print('The accuracy of the Random Forest Classifier is', round(accuracy_score(prediction_rm,y_test)*100,2))
kfold = KFold(n_splits=10, random_state=22) # k=10, split the data into 10 equal parts
result_rm=cross_val_score(model,all_features,Targeted_feature,cv=10,scoring='accuracy')
print('The cross validated score for Random Forest Classifier is:',round(result_rm.mean()*100,2))
y_pred = cross_val_predict(model,all_features,Targeted_feature,cv=10)
sns.heatmap(confusion_matrix(Targeted_feature,y_pred),annot=True,fmt='3.0f',cmap='summer')
plt.title('Confusion_matrix', y=1.05, size=15)

哇哦!準(zhǔn)確率高達(dá) 83%。就第一次嘗試而言,這個(gè)結(jié)果已經(jīng)很好了。

交叉驗(yàn)證分?jǐn)?shù)的意思是 K 折驗(yàn)證方法。如果 K=10,就是說要把數(shù)據(jù)分成 10 個(gè)變量,計(jì)算所有分?jǐn)?shù)的均值,并將它們作為最終分?jǐn)?shù)。

微調(diào)

現(xiàn)在你已經(jīng)完成了用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)的步驟。但再加一個(gè)步驟可以讓你得到更好的結(jié)果——微調(diào)。微調(diào)的意思是為機(jī)器學(xué)習(xí)算法找到最佳參數(shù)。以上面的隨機(jī)森林代碼為例:

model = RandomForestClassifier(criterion='gini', n_estimators=700,
                             min_samples_split=10,min_samples_leaf=1,
                             max_features='auto',oob_score=True,
                             random_state=1,n_jobs=-1)

你需要設(shè)置許多參數(shù)。順便說一下,上面的都是默認(rèn)值。你可以根據(jù)需要改變參數(shù)。但當(dāng)然了,這需要花費(fèi)很多時(shí)間。

別擔(dān)心——有一種叫做網(wǎng)格搜索(Grid Search)的工具,它可以自動找出最佳參數(shù)。聽起來還不錯,對吧?

# Random Forest Classifier Parameters tunning 
model = RandomForestClassifier()
n_estim=range(100,1000,100)
## Search grid for optimal parameters
param_grid = {'n_estimators' :n_estim}
model_rf = GridSearchCV(model,param_grid = param_grid, cv=5, scoring='accuracy', n_jobs= 4, verbose = 1)
model_rf.fit(train_X,train_Y)
# Best score
print(model_rf.best_score_)
#best estimator
model_rf.best_estimator_

好了,你可以自己嘗試一下,并從中享受機(jī)器學(xué)習(xí)的樂趣。

總結(jié)

怎么樣?機(jī)器學(xué)習(xí)看起來似乎并不難吧?用 Python 實(shí)現(xiàn)機(jī)器學(xué)習(xí)很簡單。一切都已經(jīng)為你準(zhǔn)備好了。你可以做一些神奇的事,并給人們帶來快樂。

原文鏈接:https://medium.freecodecamp.org/how-to-get-started-with-machine-learning-in-less-than-10-minutes-b5ea68462d23

讀BD最佳實(shí)踐案例,贏DT未來!

18各行業(yè),106個(gè)中國大數(shù)據(jù)應(yīng)用最佳實(shí)踐案例:

(1)《贏在大數(shù)據(jù):中國大數(shù)據(jù)發(fā)展藍(lán)皮書》;
免費(fèi)試讀:https://item.jd.com/12058569.html

(2)《贏在大數(shù)據(jù):金融/電信/媒體/醫(yī)療/旅游/數(shù)據(jù)市場行業(yè)大數(shù)據(jù)應(yīng)用典型案例》;

免費(fèi)試讀:https://item.jd.com/12160046.html

(3)《贏在大數(shù)據(jù):營銷/房地產(chǎn)/汽車/交通/體育/環(huán)境行業(yè)大數(shù)據(jù)應(yīng)用典型案例》;

免費(fèi)試讀:https://item.jd.com/12160064.html

(4)《贏在大數(shù)據(jù):政府/工業(yè)/農(nóng)業(yè)/安全/教育/人才行業(yè)大數(shù)據(jù)應(yīng)用典型案例》。

免費(fèi)試讀:https://item.jd.com/12058567.html

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
收藏 | 機(jī)器學(xué)習(xí)數(shù)據(jù)集匯總收集
機(jī)器學(xué)習(xí)項(xiàng)目實(shí)戰(zhàn)【機(jī)器學(xué)習(xí)預(yù)測股價(jià)】
一文全覽機(jī)器學(xué)習(xí)建模流程(Python代碼)
機(jī)器學(xué)習(xí)框架sklearn與qlib數(shù)據(jù)融合 | 從零搭建自己的AI量化平臺 #3
什么是深度學(xué)習(xí)?
貸還是不貸:如何用Python和機(jī)器學(xué)習(xí)幫你決策?
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服