KNN 近鄰分類案例實戰 (監督學習)
目錄
02 k折交叉驗證(k-fold cross validation)
一、概念
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) # 查看各樣本對應的類別