數據挖掘的葵花寶典

1、不變的招式

雖然數據分析,數據挖掘,一說預測看起來高大上,可是實際上是有套路的,預測的代碼大體都長下面這個樣子算法

# 1.選擇算法模型
model=new 算法模型()
# 2.開始訓練(傳入訓練集特徵train_x和訓練集結果train_y)
model.fit(train_x, train_y)
# 3.預測結果(傳入測試集test_x)
prediction=model.predic(測試集test_x)
# 4.計算準確率(對比預測結果prediction和測試集真實結果test_y)
準確率=metrics.accuracy_score(prediction, test_y)

套路說明:dom

  1. 將已有的數據分紅兩部分,分別是訓練集 (train_x,train_y)和測試集(test_x,test_y)
  2. 每一個集合都包含兩部分數據,特徵值x和結果值y
  3. 選用算法模型,將訓練集(train_x,train_y)進行訓練,對測試集test_x進行預測獲得預測結果prediction
  4. 將預測結果prediction和真實結果test_y進行比對,獲得預測的準確率

上面這些只是招式,其實內功都在模型上,那咱們怎麼判斷內功比較厲害呢?函數

2、如何判斷內功厲不厲害

模型就是內功,內功厲不厲害主要看下面這些指標,內功越強,預測的越準測試

1.準確率

準確率:accuracy
大部分狀況,咱們均可以使用預測的數據和真實的數據,挨個比對來得到準確率
對於正例比例極低的狀況,好比rest

信用卡欺詐
某些疾病的識別
恐怖分子的判斷

這種獲取的是佔很小的一部分,就須要用精確率-召回率來進行統計code

2.精確率和召回率

精確率(Precision):檢索出來的正確條目數佔檢索出來的總條目數的多少,衡量的是查準率;
召回率(Recall):檢索出的正確的條目佔所有正確條目數的多少,衡量的是查全率
好比,推薦系統根據你的喜愛,推薦了10個商品,其中真正相關的是5個商品,在全部的商品庫中,相關的商品一共有20個,則精確率 = 5/10,召回率 = 5/20orm

舉個例子:
從一個大米和小麥混合的袋子裏,抓一把大米,咱們確定但願抓出來的大米越多越好(精確率高),而後咱們還但願就是但願一把抓出來的是全部的大米(召回率高),簡單的說就是一個找的對,一個找的全。htm

關於模型的原理,能夠查看從小白視角理解 <數據挖掘十大算法> blog

3、代碼套路和技巧

1.如何獲得訓練集和測試集

咱們已經有了數據,須要將數據分紅兩部分:訓練集和測試集
好比能夠8成用來訓練,2成用來測試結果,sklearn提供了train_test_split stratify函數,能夠很是方便的爲咱們分割數據。
train_test_split 能夠幫助咱們把數據集抽取一部分做爲測試集,這樣咱們就能夠獲得訓練集和測試集。

參數

train_data:所要劃分的樣本特徵集
train_target:須要劃分的樣本結果
test_size / train_size: 測試集/訓練集的大小,若輸入小數表示比例,若輸入整數表示數據個數。
random_state:隨機數種子,若是須要重複試驗,能夠指定非0值,將保證獲得一組同樣的隨機數
shuffle:是否打亂數據的順序,再劃分,默認True。
stratify:none或者array/series類型的數據,表示按這列進行分層採樣。

2.如何搜索最優的參數

GridSearchCV是參數自動搜索模塊,只須要傳入須要要調優的參數及參數的取值範圍,它會把全部的參數都執行一遍,而後找出最優的,本質是一種窮舉法

from sklearn.model_selection import GridSearchCV
# 初始化算法模型
model=算法模型()
# 設置參數值取值範圍
params={"n_estimators": range(1,11)}
# 使用GriSearchCV找出最優參數
clf=GridSearchCV(estimator=model, param_grid=params)
# 執行訓練
clf.fit(iris.data, iris.target)
# 獲得最優分數和最優參數
print("最優分數: %.4lf" %clf.best_score_)
print("最優參數:", clf.best_params_)

3.如何對數據進行規範化

StandardScaler 能夠採用Z-Score規範化數據,獲得數據規範化爲均值爲 0,方差爲1的正態分佈

train_x = StandardScaler().fit_transform(train_x)

4.如何進行流水線做業

Python 有一種 Pipeline 管道機制。管道機制就是讓咱們把每一步都按順序列下來,從而建立 Pipeline 流水線做業。每一步都採用 (‘名稱’, 步驟) 的方式來表示。
好比咱們能夠把數據規範化->搜索最優的參數合成一步,寫到一個Pipline中

rf = RandomForestClassifier()
parameters = {"randomforestclassifier__n_estimators": range(1,11)}
iris = load_iris()
pipeline = Pipeline([
        ('scaler', StandardScaler()),
        ('randomforestclassifier', rf)
])
# 使用GridSearchCV進行參數調優
clf = GridSearchCV(estimator=pipeline, param_grid=parameters)
# 對iris數據集進行分類
clf.fit(iris.data, iris.target)
print("最優分數: %.4lf" %clf.best_score_)
print("最優參數:", clf.best_params_)
相關文章
相關標籤/搜索