日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

干货 | 仅需10分钟,开启你的机器学习之路!

發布時間:2024/9/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 干货 | 仅需10分钟,开启你的机器学习之路! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊“小詹學Python”,選擇“置頂”公眾號

重磅干貨,第一時間送達

本文轉載自機器之心,禁二次轉載


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

隨著行業內機器學習的崛起,能夠幫用戶快速迭代整個過程的工具變得至關重要。Python,機器學習技術領域冉冉升起的一顆新星,往往是帶你走向成功的首選。因此,用 Python 實現機器學習的指南是非常必要的。


用 Python 實現機器學習的介紹


那么為什么是 Python 呢?根據我的經驗,Python 是最容易學習的編程語言之一。現在需要快速迭代整個過程,與此同時,數據科學家不需要深入了解這種語言,因為他們可以快速掌握它。

?

有多容易呢?


for?anything?in?the_list:
????print(anything)


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


我將在下文中介紹幾個基于 Python 的庫。作為數據分析師和數據科學家,我們可以利用他們的杰作來幫助我們完成任務。這些不可思議的庫是用 Python 實現機器學習的必備工具。


NumPy


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


Pandas


這是用來處理 CSV 文件的。當然了,你還需要處理一些表格、查看統計數據等,那 Pandas 就是可以滿足你的需求的工具。


Matplotlib


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


Seaborn


這是另一個可視化工具,但這個工具更側重于統計結果的可視化,比如直方圖、餅圖、曲線圖或相關性表等。


Scikit-Learn


這是用 Python 實現機器學習的終極工具。所謂用 Python 實現機器學習指的就是這個——Scikit-Learn。所有你需要的從算法到提升的內容都能在這里找到。


Tensorflow 和 Pytorch


針對這兩個工具我不會說太多。但如果你對深度學習感興趣的話,可以詳細了解一下,它們值得你花時間去學習。(我下次會再寫一篇關于深度學習的教程,敬請期待!)



Python 機器學習項目


當然,只是閱讀和學習是沒法讓你達成心愿的。你需要實際練習。正如我博客中所說的,如果你沒有深入數據的話,那學習這些工具將毫無意義。因此,我在這里介紹一個可以輕松找到 Python 機器學習項目的地方。


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



Kaggle 是一個可以直接研究數據的平臺。你可以在這個平臺中解決一些項目,并達到真的擅長機器學習的地步。你可能更感興趣另外一些東西——Kaggle 舉辦的機器學習競賽,獎金高達 100,000 美元。你可能會想著碰碰運氣,哈哈。


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


但最重要的并不是錢——你真的可以在這里找到用 Python 實現的機器學習項目。你可以試著完成很多項目。但如果你是個新手,你可能會想參加這項競賽。


我們將在后面的教程中用到一個示例項目:


泰坦尼克:從災難中進行機器學習(https://www.kaggle.com/c/titanic


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


用 Python 實現機器學習的教程


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


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


Python 官方網站:https://www.python.org/downloads/


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


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


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


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


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



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


現在你已經安裝了所有的工具。我們開始吧!


數據探索


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


數據下載地址:https://www.kaggle.com/c/titanic/data


然后導入必要的庫:


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


載入數據:


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


輸出如下:



這就是我們的數據。它有下面幾列:


  • PassengerId,乘客的標識符;

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

  • Pclass,艙室類別,也許 1 表示經濟艙,2 表示商務艙,3 表示頭等艙;

  • Name,乘客的名字;

  • Sex,性別;

  • Age,年齡;

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

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

  • Ticket,船票詳情;

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

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


在探索數據時,常常會遇到數據缺失的問題。我們來看一下


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)


我們會看到這樣的結果:



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


數據清理


我們 90% 的時間都花在這上面。我們要針對每一個機器學習項目進行大量的數據清理。當數據清理干凈時,我們就可以輕松地進行下一步了,什么都不用擔心。


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


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


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


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


現在檢查一下清理過的數據。


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



完美!沒有任何缺失數據了!這表示數據已經清理干凈了。



特征工程


現在數據已經清理干凈了。接下來我們要進行特征工程。


特征工程基本上就是根據當前可用數據發現特征或數據的技術。有幾種方法可以實現這種技術。在很多時候這都是常識。


我們以登船地數據為例——這是用 Q、S 或 C 填充的數據。Python 庫不能處理這個,因為它只能處理數字。所以你需要用所謂的獨熱向量化(One Hot Vectorization)來處理,它可以把一列變成三列。用 0 或 1 填充 Embarked_Q、Embarked_S 和 Embarked_C,來表示這個人是不是從這個港口出發的。


再以 SibSp 和 Parch 為例。這兩列沒有什么有趣的,但是你可能會想知道某個乘客有多少家人登上了這艘船。如果家人多的話可能會增加生存幾率,因為他們可以互相幫助。從另一個角度說,單獨登船的乘客可能很難生存下去。


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


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


這就是創建 bin 列的原因。也許就年齡而言,我們可以創建 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"])


現在,你已經創建完成所有的特征了。接著我們看看這些特征之間的相關性:


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()



相關值接近 1 意味著高度正相關,-1 意味著高度負相關。例如,性別為男和性別為女之間就呈負相關,因為必須將乘客識別為一種性別(或另一種)。此外,你還可以看到,除了用特征工程創建的內容外,沒有哪兩種是高度相關的。這證明我們做得對。


如果某些因素之間高度相關會怎么樣?我們可以刪除其中的一個,新列中的信息并不能給系統提供任何新信息,因為這兩者是完全一樣的。

用 Python 實現機器學習


現在我們已經到達本教程的高潮——機器學習建模。


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 庫中有多種算法供你選擇:


  • 邏輯回歸

  • 隨機森林

  • 支持向量機

  • K 最近鄰

  • 樸素貝葉斯

  • 決策樹

  • AdaBoost

  • LDA

  • 梯度增強


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


以我最喜歡的隨機森林算法為例:


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)



哇哦!準確率高達 83%。就第一次嘗試而言,這個結果已經很好了。


交叉驗證分數的意思是 K 折驗證方法。如果 K=10,就是說要把數據分成 10 個變量,計算所有分數的均值,并將它們作為最終分數。


微調


現在你已經完成了用 Python 實現機器學習的步驟。但再加一個步驟可以讓你得到更好的結果——微調。微調的意思是為機器學習算法找到最佳參數。以上面的隨機森林代碼為例:


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)


你需要設置許多參數。順便說一下,上面的都是默認值。你可以根據需要改變參數。但當然了,這需要花費很多時間。


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


#?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_


好了,你可以自己嘗試一下,并從中享受機器學習的樂趣。


總結


怎么樣?機器學習看起來似乎并不難吧?用 Python 實現機器學習很簡單。一切都已經為你準備好了。你可以做一些神奇的事,并給人們帶來快樂。


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


推薦閱讀:

Jupyter與PyCharm不可兼得?Jupytext就是你需要的!


互動主題:

分享一下你閱讀本文的收獲或已有認識!


掃碼關注:


總結

以上是生活随笔為你收集整理的干货 | 仅需10分钟,开启你的机器学习之路!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。