成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于 Python 和 Scikit-Learn 的機器學習介紹

開發 后端
我叫Alex,我在機器學習和網絡圖分析(主要是理論)有所涉獵。我同時在為一家俄羅斯移動運營商開發大數據產品。這是我第一次在網上寫文章,不喜勿噴。

你好,%用戶名%!

我叫Alex,我在機器學習和網絡圖分析(主要是理論)有所涉獵。我同時在為一家俄羅斯移動運營商開發大數據產品。這是我***次在網上寫文章,不喜勿噴。

現在,很多人想開發高效的算法以及參加機器學習的競賽。所以他們過來問我:”該如何開始?”。一段時間以前,我在一個俄羅斯聯邦政府的下屬機構中領導了媒體和社交網絡大數據分析工具的開發。我仍然有一些我團隊使用過的文檔,我樂意與你們分享。前提是讀者已經有很好的數學和機器學習方面的知識(我的團隊主要由MIPT(莫斯科物理與技術大學)和數據分析學院的畢業生構成)。

 基于 Python 和 Scikit-Learn 的機器學習介紹

這篇文章是對數據科學的簡介,這門學科最近太火了。機器學習的競賽也越來越多(如,Kaggle, TudedIT),而且他們的資金通常很可觀。

R和Python是提供給數據科學家的最常用的兩種工具。每一個工具都有其優缺點,但Python最近在各個方面都有所勝出(僅為鄙人愚見,雖然我兩者都用)。這一切的發生是因為Scikit-Learn庫的騰空出世,它包含有完善的文檔和豐富的機器學習算法。

請注意,我們將主要在這篇文章中探討機器學習算法。通常用Pandas包去進行主數據分析會比較好,而且這很容易你自己完成。所以,讓我們集中精力在實現上。為了確定性,我們假設有一個特征-對象矩陣作為輸入,被存在一個*.csv文件中。

數據加載

首先,數據要被加載到內存中,才能對其操作。Scikit-Learn庫在它的實現用使用了NumPy數組,所以我們將用NumPy來加載*.csv文件。讓我們從UCI Machine Learning Repository下載其中一個數據集。

import numpy as np

import urllib

# url with dataset

url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"

# download the file

raw_data = urllib.urlopen(url)

# load the CSV file as a numpy matrix

dataset = np.loadtxt(raw_data, delimiter=",")

# separate the data from the target attributes

X = dataset[:,0:7]

y = dataset[:,8]

我們將在下面所有的例子里使用這個數據組,換言之,使用X特征物數組和y目標變量的值。

數據標準化

我們都知道大多數的梯度方法(幾乎所有的機器學習算法都基于此)對于數據的縮放很敏感。因此,在運行算法之前,我們應該進行標準化,或所謂的規格化。標準化包括替換所有特征的名義值,讓它們每一個的值在0和1之間。而對于規格化,它包括數據的預處理,使得每個特征的值有0和1的離差。Scikit-Learn庫已經為其提供了相應的函數。

from sklearn import metrics

from sklearn.ensemble import ExtraTreesClassifier

model = ExtraTreesClassifier()

model.fit(X, y)

# display the relative importance of each attribute

print(model.feature_importances_)

特征的選取

毫無疑問,解決一個問題最重要的是是恰當選取特征、甚至創造特征的能力。這叫做特征選取和特征工程。雖然特征工程是一個相當有創造性的過程,有時候更多的是靠直覺和專業的知識,但對于特征的選取,已經有很多的算法可供直接使用。如樹算法就可以計算特征的信息量。

from sklearn import metrics

from sklearn.ensemble import ExtraTreesClassifier

model = ExtraTreesClassifier()

model.fit(X, y)

# display the relative importance of each attribute

print(model.feature_importances_)

其他所有的方法都是基于對特征子集的高效搜索,從而找到***的子集,意味著演化了的模型在這個子集上有***的質量。遞歸特征消除算法(RFE)是這些搜索算法的其中之一,Scikit-Learn庫同樣也有提供。

from sklearn.feature_selection import RFE

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

# create the RFE model and select 3 attributes

rfe = RFE(model, 3)

rfe = rfe.fit(X, y)

# summarize the selection of the attributes

print(rfe.support_)

print(rfe.ranking_)

算法的開發

正像我說的,Scikit-Learn庫已經實現了所有基本機器學習的算法。讓我來瞧一瞧它們中的一些。

邏輯回歸

大多數情況下被用來解決分類問題(二元分類),但多類的分類(所謂的一對多方法)也適用。這個算法的優點是對于每一個輸出的對象都有一個對應類別的概率。

from sklearn import metrics

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

樸素貝葉斯

它也是最有名的機器學習的算法之一,它的主要任務是恢復訓練樣本的數據分布密度。這個方法通常在多類的分類問題上表現的很好。

from sklearn import metrics

from sklearn.naive_bayes import GaussianNB

model = GaussianNB()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

k-最近鄰

kNN(k-最近鄰)方法通常用于一個更復雜分類算法的一部分。例如,我們可以用它的估計值做為一個對象的特征。有時候,一個簡單的kNN算法在良好選擇的特征上會有很出色的表現。當參數(主要是metrics)被設置得當,這個算法在回歸問題中通常表現出***的質量。

from sklearn import metrics

from sklearn.neighbors import KNeighborsClassifier

# fit a k-nearest neighbor model to the data

model = KNeighborsClassifier()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

決策樹

分類和回歸樹(CART)經常被用于這么一類問題,在這類問題中對象有可分類的特征且被用于回歸和分類問題。決策樹很適用于多類分類。

from sklearn import metrics

from sklearn.tree import DecisionTreeClassifier

# fit a CART model to the data

model = DecisionTreeClassifier()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

支持向量機

SVM(支持向量機)是***的機器學習算法之一,它主要用于分類問題。同樣也用于邏輯回歸,SVM在一對多方法的幫助下可以實現多類分類。

from sklearn import metrics

from sklearn.svm import SVC

# fit a SVM model to the data

model = SVC()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

除了分類和回歸問題,Scikit-Learn還有海量的更復雜的算法,包括了聚類, 以及建立混合算法的實現技術,如Bagging和Boosting。

如何優化算法的參數

在編寫高效的算法的過程中最難的步驟之一就是正確參數的選擇。一般來說如果有經驗的話會容易些,但無論如何,我們都得尋找。幸運的是Scikit-Learn提供了很多函數來幫助解決這個問題。

作為一個例子,我們來看一下規則化參數的選擇,在其中不少數值被相繼搜索了:

import numpy as np

from sklearn.linear_model import Ridge

from sklearn.grid_search import GridSearchCV

# prepare a range of alpha values to test

alphas = np.array([1,0.1,0.01,0.001,0.0001,0])

# create and fit a ridge regression model, testing each alpha

model = Ridge()

grid = GridSearchCV(estimator=model, param_grid=dict(alpha=alphas))

grid.fit(X, y)

print(grid)

# summarize the results of the grid search

print(grid.best_score_)

print(grid.best_estimator_.alpha)

有時候隨機地從既定的范圍內選取一個參數更為高效,估計在這個參數下算法的質量,然后選出***的。

import numpy as np

from scipy.stats import uniform as sp_rand

from sklearn.linear_model import Ridge

from sklearn.grid_search import RandomizedSearchCV

# prepare a uniform distribution to sample for the alpha parameter

param_grid = {'alpha': sp_rand()}

# create and fit a ridge regression model, testing random alpha values

model = Ridge()

rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100)

rsearch.fit(X, y)

print(rsearch)

# summarize the results of the random parameter search

print(rsearch.best_score_)

print(rsearch.best_estimator_.alpha)

 

至此我們已經看了整個使用Scikit-Learn庫的過程,除了將結果再輸出到一個文件中。這個就作為你的一個練習吧,和R相比Python的一大優點就是它有很棒的文檔說明。

在下一篇文章中,我們將深入探討其他問題。我們尤其是要觸及一個很重要的東西——特征的建造。我真心地希望這份材料可以幫助新手數據科學家盡快開始解決實踐中的機器學習問題。***,我祝愿那些剛剛開始參加機器學習競賽的朋友擁有耐心以及馬到成功!

責任編輯:王雪燕 來源: Python開發者
相關推薦

2018-09-06 08:00:00

深度學習TensorFlowPython

2023-05-26 12:45:22

predict?方法數據

2021-05-12 09:58:09

PythonXGBoostscikit-lear

2017-01-05 10:07:33

大數據TheanoCaffe

2017-11-03 12:57:06

機器學習文本數據Python

2022-04-15 10:11:03

機器學習scikit-lea

2017-04-21 09:59:11

開源機器學習框架

2018-10-15 09:10:09

Python編程語言數據科學

2017-07-20 10:23:20

pythonscikit-lear垃圾郵件過濾

2023-02-13 15:00:13

機器學習scikit-leaPyTorch

2023-11-13 18:05:53

處理數據搭建模型

2018-04-06 05:10:04

K-NN數據集算法

2024-02-01 09:43:32

模型人工智能

2018-05-15 08:27:20

Scikit-lear機器學習Python

2016-12-18 15:03:57

Python Scikit Lea數據

2016-12-20 16:07:13

Python數據預處理

2021-01-26 09:46:59

PythonStacking機器學習

2018-08-30 14:58:12

機器學習磁盤故障

2017-02-16 08:25:35

2017-09-20 15:03:42

機器學習XGBoost使用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 四虎影院久久 | 精品国产一区二区三区久久久蜜月 | 4h影视 | 久久亚洲一区二区三区四区 | 免费中文字幕 | 久久噜噜噜精品国产亚洲综合 | 亚洲欧美视频 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 久久国产精品99久久久大便 | 亚洲精品在线播放 | 亚洲综合成人网 | 三级黄色片在线 | 亚洲综合婷婷 | 久草青青草 | 日韩在线不卡 | 日日夜夜精品免费视频 | 日韩国产高清在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 成人久久 | 在线免费观看成人 | 香蕉婷婷| 成人久久久 | 久久99精品久久久久 | 2021天天干夜夜爽 | 国产高清久久久 | 国产精品成人一区二区三区 | 99视频免费在线 | 免费啪啪 | 欧美一级做性受免费大片免费 | 91av视频在线观看 | 伦理一区二区 | 天天插天天操 | 亚洲黄色一级毛片 | 狠狠亚洲| 国产精品精品视频一区二区三区 | 粉嫩一区二区三区国产精品 | 国产精品揄拍一区二区 | 日韩欧美视频在线 | 毛片免费观看 | 欧美中文字幕一区二区 | 日韩美女一区二区三区在线观看 |