KNN近鄰分類業務案例詳解 監督學習

KNN 近鄰分類案例實戰 (監督學習)

目錄

KNN 近鄰分類案例實戰 (監督學習)

一、概念

二、訓練方法要點

01 訓練集和測試集

02 k折交叉驗證(k-fold cross validation)

三、API重點(KNN模型)

四、案例


一、概念

KNN近鄰分類算法(監督學習)

KNN算法從訓練集中找到和新數據最接近的K條記錄,然後個努努他們的主要分類來決定新數據的類別。

 

二、訓練方法要點

 

01 訓練集和測試集

train_test_solit 是交叉驗證中的常數,功能是從樣本中隨機的按照比例選取train_data 和test_data.

X_train,X_test,Y_train,y_test=cross_validation.train_test_split(train_data,train_target,test_size=0.4,random_state=0)

cross_validation爲交叉驗證

參數解釋:
train_data:索要劃分的樣本特徵集
train_target 索要劃分的樣本結果
test_size 樣本佔比,如果是整數的話就是樣本的數量
random_state:是隨機數的種子。

 

02 k折交叉驗證(k-fold cross validation)

 

sklearn.cross_valodation.cross_val_score(estimator,X,y=None,scoring=None,cv=None,n_jobs=1,verbose=0,fit_params=None,pre_dispatch='2*n_jobs')

estimator :特徵數據集
X 數據
Y 預測數據
soring : 調用的方法
cv    交叉驗證生成器或可迭代的次數

n_job:同時工作的CPU個數、
verbose:詳細程度

例如:

設置k=10,那麼我們把原來的數據集隨機分爲10分,分別爲{D1,D2,。。。。D10}

接着,使用D1作爲測試集,{D2,D3,,,,,D10}作爲訓練街,計算得分s1;

繼續,使用D2位測試集,{D1,D3,,,,D10}作爲訓練集,計算得分s10;

計算這組得分{s1,S2,,,S10}的平均值,作爲模型的總和得分

    綜合得分=(S1+。。。。+S10)/10

 

三、API重點(KNN模型)

 

01   knnmodel=neighbors.KNeighborClassifier(n_neighbors=5)

           n_neighbors  n的個數
           返回          KNN模型
 02   knnModel.fit(tData,tTarget)  KNN訓練方法

    tData   特徵集的訓練數據
    tTarget  目標集的訓練數據
    
 03   knnModel.score(sData,sTarget)  KNN 評分方法
    
        sData  測試數據的屬性數據
        sTarget 測試數據的目標數據
        
04    knnModel.predict(pData)         KNN預測方法

       pData 需要預測的屬性數據
       返回 : 模型預測的結果 

 

四、案例

 


# 目的:依據站點現有分類,通過對屬性的分析進行對新站點的KNN分類:(流水、費比roi、當週銷轉、跨期銷轉 網銷 銷轉) 

import pandas

data = pandas.read_csv('D:\\DATA\\pycase\\number2\\project\\pretice\\KNNData1.csv')

# 1 數據質量的查看和探索處理

explore=data.describe()

#  處理空值和長達異常值,這裏邊是指標,超過1的當期銷轉爲異常。

Data=data.dropna()

explore=Data.describe()

# 2 數據變換 0-1標準化處理

from sklearn.preprocessing import MinMaxScaler

scaler=MinMaxScaler()


Data[[ '銷轉', 'ROI', '流水','名片成本','Cvr',
       '當期銷轉', '跨期銷轉']]=scaler.fit_transform(Data[[ '銷轉', 'ROI', '流水','名片成本','Cvr',
       '當期銷轉', '跨期銷轉']])

# 3 數據準備,進行訓練數據和測試數據的切分
      
from sklearn.model_selection import train_test_split

# 選擇數據劃分的屬性特徵分爲特徵和測試,按照一定比例切分數據集


Train_data=Data[[ '銷轉', 'ROI', '流水','名片成本','Cvr',
       '當期銷轉', '跨期銷轉']]

Train_target=Data['分類']

data_train,data_test,target_train,target_test=train_test_split(
        Train_data,
        Train_target,
        test_size=0.3 # (3|7分)
        )


# 導入近鄰方法,開始建立KNN模型

from sklearn import neighbors

# 確定分類的結果種類

KnnModel=neighbors.KNeighborsClassifier(n_neighbors=3)

# 使用fit方法進行模型的訓練

KnnModel.fit(data_train,target_train)

# 使用score對訓練模型進行評分,
# 依據測試數據對其進行準確率的評估

KnnModel.score(data_test,target_test)



# 導入K折交叉驗證的方法

from sklearn.model_selection import cross_val_score

# 定義交叉驗證的特徵數據集、訓練集、測試集、交叉驗證次數
# K折交叉驗證,這裏是5折

cross_val_score(
        KnnModel,
        Train_data,
        Train_target,
        cv=6
        )

# 導入新數據進行訓練和測試

newdata=pandas.read_csv('D:\\DATA\\pycase\\number2\\project\\pretice\\KNNData2.csv')

newData=newdata.dropna()

# 同樣的對數據變換 0-1標準化處理

from sklearn.preprocessing import MinMaxScaler

scaler=MinMaxScaler()


newData[[ '銷轉', 'ROI', '流水','名片成本','Cvr',
       '當期銷轉', '跨期銷轉']]=scaler.fit_transform(newData[[ '銷轉', 'ROI', '流水','名片成本','Cvr',
       '當期銷轉', '跨期銷轉']])

inputdata=newData[[ '銷轉', 'ROI', '流水','名片成本','Cvr',
       '當期銷轉', '跨期銷轉']]

# 使用模型進行預測分析

KnnModel.predict(inputdata)

newData['分類']=KnnModel.predict(inputdata) # 查看各樣本對應的類別


 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章