1. 程式人生 > >python實現sklearn的基本操作流程,sklearn預處理方法,sklearn基礎演算法的使用,以及sklearn模型的選擇方法。

python實現sklearn的基本操作流程,sklearn預處理方法,sklearn基礎演算法的使用,以及sklearn模型的選擇方法。

一、資料的獲取與分析

1.讀取資料

本文使用pandas的read_csv方法讀取資料,常用的的方法還有,如pandas.read_sql_query(),pandas.read_excel()等。

import pandas as pd
#讀取資料
data = pandas.read_csv('dest.csv')

2.分析資料

在進行資料分析之前,首先要了解要分析的資料,以下操作為幫助自己更好的瞭解自己的資料及其結構。

#檢視資料的資料維度
data.shape
#檢視資料是否有空值。索引為欄位,值為bool值,True有空值,False無空值。
data.isnull().any()
#檢視資料的資料型別
data.info()
#檢視資料的取值區間。
print(data)

二、資料的預處理

如果目標欄位為數字型

機器能夠直接識別數字資訊,故可以直接進行處理。

StandardScaler()

去均值和方差歸一化。使資料轉換為均值為0,方差為1的列。

from sklearn.preprocessing import StandardScaler
std = StandardScaler()
#可以對多個欄位同時進行標準化處理
cols = ['欄位1','欄位2']
data[cols] = std.fit_transform(data[cols])

MinMaxScaler()

最小最大值標準化,將屬性縮放到一個指定的最大和最小值(通常是1-0)之間。通常指定feature_range。

from sklearn.preprocessing import MinMaxScaler
#將其標準化為最小值為2,最大值為5
mms = .MinMaxScaler(feature_range=(2,5))
#可以對多個欄位同時進行標準化處理
cols = ['欄位1','欄位2']
data[cols] = mm.fit_transform(data[cols])

VarianceThreshold()

資料特徵值選擇。篩選出特徵值大於某個值的欄位。

from sklearn.feature_selection import VarianceThreshold
#threshold閾值,選取特徵值大於閾值的欄位。
var = VarianceThreshold(threshold=10.0)
#可以對多個欄位同時進行標準化處理
cols = ['欄位1','欄位2']
data[cols] = var.fit_transform(data[cols])

如果目標欄位為文字欄位

如果為中文文字欄位。要先使用jieba分詞,對文字資料進行分詞。然後將文字資訊用空格隔開。進行預處理,這裡就不過多介紹jieba分詞。大家可以去詳細看看jieba分詞。

TfidfVectorizer()

根據TF(詞頻)和IDF(逆向詞頻)進行分類。通過get_feature_names()可獲得所有文字的關鍵詞,通過toarray()可看到詞頻矩陣的結果。

from sklearn.feature_extraction.text import TfidfVectorizer
tf = TfidfVectorizer()
cols = ['欄位1','欄位2']
data_new = tf.fit_transform(data[cols])
#轉化為矩陣形式
print(data_new.toarray())
#檢視關鍵詞
print(data_new.get_feature_names())

CountVectorizer()

會將文字中的詞語轉換為詞頻矩陣,它通過fit_transform函式計算各個詞語出現的次數,通過get_feature_names()可獲得所有文字的關鍵詞,通過toarray()可看到詞頻矩陣的結果。

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
cols = ['欄位1','欄位2']
data_new = cv.fit_transform(data[cols])
#轉化為矩陣形式
print(data_new.toarray())
#檢視關鍵詞
print(data_new.get_feature_names())

如果目標資料為字典(dict)

DictVectorizer()

對使用字典儲存的資料進行特徵抽取和向量化。它通過fit_transform函式計算各個詞語出現的次數,通過get_feature_names()可獲得所有文字的關鍵詞,通過toarray()可看到詞頻矩陣的結果。

from sklearn.feature_extraction import DictVectorizer
#sparse=False表示不轉化為稀疏矩陣。
dict = DictVectorizer(sparse=False)
cols = ['欄位1','欄位2']
data_new = dict.fit_transform(data[lols])
#轉化為矩陣形式
print(data_new.toarray())
#檢視關鍵詞
print(data_new.get_feature_names())

三、將資料分為訓練集和測試集

如果待測樣本中的正負樣本值相差不大,則使用train_test_split()將資料分為訓練集和測試集

from sklearn.model_selection import train_test_split
#X為所有的X值,y為X值所對應的結果值。test_size=0.25表示測試集佔25%,random_state 表示隨機取出資料
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

如果待測樣本中正負樣本值相差很大,則需要使用SMOTE過取樣。需要安裝imblearn庫。

pip install imblearn
from sklearn.model_selection import train_test_split
#將資料分為測試集和訓練集但正負樣本值相差過大。
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.25)

#過取樣
from imblearn.over_sampling import SMOTE
# 訓練時,要保證樣本均衡,將X_train和y_train樣本過取樣。測試時候,樣本不均衡,沒問題的
smote = SMOTE()
X_train_new,y_train_new = smote.fit_sample(X_train,y_train)

四、基本模型介紹

一:線性迴歸模型 LinearRegression()

from sklearn.linear_model import LinearRegression
from sklearn.externals import joblib
from sklearn.metrics import r2_score
lr = LinearRegression()
#訓練模型
lr.fit(X_train_new,y_train_new)
#儲存訓練模型
joblib.dump(lr,'./iris.pkl')
#進行預測
y_predict = lr.predict(X_test)
#如果預測資料進行過預處理,還要再轉換回原始資料,例如進行過標準化。
y_predict_true = std_y.inverse_transform(y_predict)
#對模型進行評分。
score = r2_score(y_test,y_predict_true)

二、樸素貝葉斯分類器 MultinomialNB

從已知

from sklearn.naive_bayes import MultinomialNB
mul = MultinomialNB()
#訓練模型
mul.fit(X_train_new,y_train_new)
#進行預測
y_predict = mul.predict(X_test)

三、K最近鄰分類器(Knn演算法) KNeighborsClassifier

kmeans演算法的過程:(假如有兩類)
1.隨機選擇兩個點作為聚類的中心
2.計算所有點距離兩個中心的距離,選擇距離較近的點作為類別(例如:距離藍色點近,類別就是藍色)
3.計算已經分好類的各組資料的平均值,使用各組資料的平均值作為新的中心。
4.以新的中心為依據,跳轉到第二步。
5.直到收斂(兩次迭代的數值沒有明顯變化:新中心點的距離減去上次中心點的距離小於某個閾值)。

from sklearn.neighbors import KNeighborsClassifier
#n_neighbors=3表示找出三個最近的 判斷這三個中屬於哪個類別的多。
knn = KNeighborsClassifier(n_neighbors=3)
#訓練模型
knn.fit(X_train_new,y_train_new)
#進行預測
knn.predict(x_test)

四、決策樹 DecisionTreeClassifier

決策樹是一種無監督的學習方法,用於分類和迴歸。它對資料中蘊含的決策規則建模,以預測目標變數的值。主要是利用資訊熵增益的不同。

from sklearn.tree import DecisionTreeClassifier
d_tree = DecisionTreeClassifier()
#訓練模型
d_tree.fit(X_train_new,y_train_new)
#預測資料
d_tree.predict(x_test)

五、總結

sklearn演算法使用方法,都是使用fit函式訓練模型,然後再使用predict函式進行預測。下面貼一張sklearn如何選擇演算法的圖。
在這裡插入圖片描述