Python資料探勘入門與實踐---使用scikit-learn 估計器分類
本章的幾個概念:
估計器(estimator) 用於分類、聚類和迴歸分析
轉換器(transformer):用於資料預處理回來資料轉換
流水線(pipeline): 組合資料探勘流程, 便於在此使用
1.scikit-learn估計器
資料集下載地址:UCI
載入資料集:
#coding=gbk
#python 資料探勘入門與實踐
#第2章: 使用scikit-learn 估計器分類
#估計器(estimator) 用於分類、聚類和迴歸分析
#轉換器(transformer):用於資料預處理回來資料轉換
#流水線(pipeline): 組合資料探勘流程, 便於在此使用
import numpy as np
import csv
X = np.zeros((351,34), dtype = 'float')
y = np.zeros((351,), dtype = 'int') #原文中dtype 為'float' ,此處應該為 int 型別,其自動將true 轉換成 1 ,false轉換成 0
#載入資料集
with open(r'D:\datasets\ionosphere.csv','r') as input_file:
reader = csv.reader(input_file)
for i , row in enumerate(reader):
data = [float(datum) for datum in row[:-1]] #將前34個特徵儲存到x 中
X[i]= data
y[i] = row[-1]=='g' #把字母型轉換成數值型
print(X[:5])
print(y[:9])
實現流程的標準化:
#建立訓練集和測試集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state= 14)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier() #使用KNN 演算法
knn.fit(X_train, y_train)
y_predicted = knn.predict(X_test)
accuracy = np.mean(y_predicted == y_test) *100
print('the accuracy is %.1f'%accuracy) # the accuracy is 86.4
#使用交叉驗證
from sklearn.model_selection import cross_val_score
scores = cross_val_score(knn, X, y, scoring= 'accuracy')
average_score = np.mean(scores) * 100
print('the average accuracy is %.1f'%average_score+'%') # the average accuracy is 82.3%
#作者say:考慮到還沒有進行調引數, 這個結果還是相當不錯
設定引數:
#設定引數
#測試一系列的n_neighbors 一系列的值, 進行重複多次試驗, 觀察引數值帶來的結果之間的差異
ave_score =[]
all_score = []
for n_neighbors in range(1,21):
estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
scores = cross_val_score(estimator, X, y, scoring= 'accuracy')
all_score.append(scores)
ave_score.append(np.mean(scores))
print(ave_score)
import matplotlib.pyplot as plt
x1 = range(1,21)
plt.plot(x1, ave_score, '-o')
plt.show() #有圖知道, 隨著 K 值得增大 , 整體的正確率趨勢是下降的
2.流水線在預處理中的使用
不同特徵的取值範圍千差萬別, 常見的方法是對不同的特徵進行規範化,使他們的特徵值落在相同的值域或者是屬於某幾個確定的類別
一旦解決這個問題, 不同的特徵型別對演算法的影響將大大降低, 分類的正確率就有大大的提升
sckit-learn 的預處理工具 稱為 轉換器(Transfomer),它接受原始資料集, 返回的是轉換後的資料集。除了,處理數值型的特徵還能用於抽取特徵
X_broken = np.array(X)
X_broken[:,::2] /=10 #每隔一行, 就把第二個特徵的值除以10
knn2 = KNeighborsClassifier()
broken_score = cross_val_score(knn2, X_broken, y, scoring='accuracy')
ave_broken_score = np.mean(broken_score)
print('the broken score accuracy is %.3f'%ave_broken_score) # the broken score accuracy is 0.715
#將特徵值轉換成 0 到1 之間,以解決問題
#標準預處理:使用MinMaxScalar 類進行規範化處理,規範到0到1 之間
#對X 進行預處理, 有些轉換器要求像訓練分類器那樣先進行訓練, 但是MinMaxScalar 不需要, 直接呼叫 fit_transform 函式,即可以完成訓練和轉換
from sklearn.preprocessing import MinMaxScaler
X_transform = MinMaxScaler().fit_transform(X_broken)
knn2 = KNeighborsClassifier()
transform_scores = cross_val_score(knn2, X_transform, y, scoring='accuracy')
ave_transform_scores = np.mean(transform_scores) * 100
#MinMaxScaler 將特徵規範到相同的值域, 這樣特徵就不會僅僅因為值大二具備更強的區分度
print('the x_transformed average score is %.2f'%ave_transform_scores) #the x_transformed average score is 82.34
#流水線
#流水線的輸入為一系列的資料探勘的步驟, 其中最後一步必須是估計器, 前幾部是轉換器。
from sklearn.pipeline import Pipeline
scailing_pipeline = Pipeline([('scale', MinMaxScaler()),
('knn', KNeighborsClassifier())])
scores1 = cross_val_score(scailing_pipeline, X_broken, y, scoring= 'accuracy')
pipeline_score = np.mean(scores1) *100
print('the accuracy is %.2f'%pipeline_score+'%') # the accuracy is 82.34% 與上式結果是一樣的
相關文章
- 【機器學習入門與實踐】合集入門必看系列,含資料探勘專案實戰,適合新人入門機器學習
- 入門系列之Scikit-learn在Python中構建機器學習分類器Python機器學習
- python中的scikit-learn庫來實現SVM分類器。Python
- 【python資料探勘課程】二十七.基於SVM分類器的紅酒資料分析Python
- 資料探勘概念與技術 - chapter 8 - 分類:基本概念APT
- Hadoop大資料探勘從入門到進階實戰Hadoop大資料
- Scikit-learn 機器學習庫介紹!【Python入門】機器學習Python
- 如何使用Python、Transformers和scikit-learn對文字進行分類?PythonORM
- 《Python程式設計:從入門到實踐》Python程式設計
- 好大夫資料安全分類分級實踐探索
- locsut 入門與實踐
- Kafka 入門與實踐Kafka
- TypeScript入門與實踐TypeScript
- Docker 入門與實踐Docker
- Python有哪些資料探勘工具?五大類Python
- Milvus向量資料庫入門實踐資料庫
- Python 程式設計從入門到實踐5Python程式設計
- 資源 | 小白必收!《Python程式設計 從入門到實踐》Python程式設計
- python3入門與實踐(六):函數語言程式設計Python函數程式設計
- 《資料探勘概念與技術》第八章 分類:基本概念
- Python入門到實踐-瞭解PythonPython
- 使用API介面獲取商品資料:從入門到實踐API
- 快速入門pandas進行資料探勘資料分析[多維度排序、資料篩選、分組計算、透視表](一)排序
- 教程 | 用Scikit-Learn實現多類別文字分類文字分類
- GitOps快速入門與實踐Git
- 資料探勘——KNN演算法(手寫數字分類)KNN演算法
- 資料分析與資料探勘 - 04科學計算
- 資料探勘與生活
- 資料探勘-層次聚類聚類
- python入門使用(四):資料型別Python資料型別
- Python專案實戰(一)《Python程式設計 從入門到實踐》Python程式設計
- 資料治理與資料分類分級!
- 如何通過Scikit-Learn實現多類別文字分類?文字分類
- 如何透過Scikit-Learn實現多類別文字分類?文字分類
- 【機器學習入門與實踐】資料探勘-二手車價格交易預測(含EDA探索、特徵工程、特徵最佳化、模型融合等)機器學習特徵工程模型
- 【scikit-learn基礎】--『資料載入』之真實資料集
- Git與Github入門實踐(上)Github
- 使用 Python 進行資料分析:入門指南Python