R成精-機器學習分類演算法
1、演算法介紹
一個樣本對應一個分類,用訓練資料訓練一個分類器,在輸入沒有標籤的樣本時,將新資料與訓練集的資料對應特徵進行比較,找出“距離”最近的k個資料,選擇這k個資料中出現最多的分類作為新資料的分類。
演算法描述
- 計算已知類別資料及中的點與當前點的距離;
距離計算方法有"euclidean"(歐氏距離),”minkowski”(明科夫斯基距離), "maximum"(切比雪夫距離), "manhattan"(絕對值距離),"canberra"(蘭式距離), 或 "minkowski"(馬氏距離)等. - 按距離遞增次序排序
- 選取與當前點距離最小的k個點,
- 確定前K個點所在類別出現的頻率
- 返回頻率最高的類別作為當前類別的預測
特點
KNN是有監督的學習演算法,其特點有:
- 精度高,對異常值不敏感
- 只能處理數值型屬性
- 計算複雜度高(如已知分類的樣本數為n,那麼對每個未知分類點要計算n個距離)
存在的問題
KNN演算法目前存在的問題:
- k值的確定是個難題。
- 如果距離最近的k個已知分類樣本中,頻數較高的型別有多個(頻數相同),如何選擇對未知樣本的分類?目前看是隨機的。
- 如果有n個未知型別樣本,m個已知型別樣本,則需要計算n*m個距離,計算量較大,且需儲存全部資料集合,空間複雜度也較大。
- 能否把預測的樣本分類加入到已知類別集合中,對剩餘的未知型別樣本進行分類?
- 歸一化放在所有處理的最前面,這樣需要知道全部的樣本集合(已知分類+未知分類)來構建分類器,而實際上未知分類的樣本並不一定能事先獲得,這樣如何進行歸一化處理,任然是個問題。
應用領域:
- 計算機視覺:包含字元和麵部識別等
- 推薦系統:推薦受眾喜歡電影、美食和娛樂等
- 基因工程:識別基因資料的模式,用於發現特定的蛋白質或疾病等
2、R演算法
- class函式包中的knn、knn.cv函式;
- caret函式包中的knn3函式;
- kknn函式包中的kknn函式;
- ipred函式包中的ipredknn函式
- DMwR函式包中的kNN函式
3、案例
實驗環境
- 作業系統:
Mac OS X High Sierra 10.13.1+2.5 GHz Intel Core i7+16 GB 1600 MHz DDR3
R version 3.4.2 (2017-09-28)
- 資料集
kaggle上泰坦尼客號資料集 - 說明
變數名 | 描述 |
---|---|
Survived | 生存 (1) or 死亡 (0) |
Pclass | 客艙等級 |
Name | 姓名 |
Sex | 性別 |
Age | 年齡 |
SibSp | 兄弟姐妹和夫妻數 |
Parch | 父母和兒女數 |
Ticket | 船票號 |
Fare | 費用 |
Cabin | 客艙號 |
Embarked | 出發的港口 |
- 程式程式碼
#資料處理
library("class")
library("caret")
library("kknn")
library("ipred")
library("DMwR")#載入程式包
library('dplyr')
test<-read.csv("./test.csv",stringsAsFactors = F)
train<-read.csv("./train.csv",stringsAsFactors = F)
test$datatype<-"test"
train$datatype<-"train"
full <-bind_rows(train, test)
full$Sex[full$Sex=="female"]<-1
full$Sex[full$Sex=="male"]<-0
full$Sex<-as.numeric(full$Sex)
full$Embarked [full$Embarked =="S"]<-1
full$Embarked [full$Embarked =="C"]<-2
full$Embarked [full$Embarked =="Q"]<-3
full$Embarked <-as.numeric(full$Embarked )
full$Age[is.na(full$Age)]<--1
full$Fare[is.na(full$Fare)]<-8.05
full$Embarked[is.na(full$Embarked)]<-2
full$Pclass<-as.numeric(full$Pclass)
full$SibSp<-as.numeric(full$SibSp)
full$Parch<-as.numeric(full$Parch)
train <- full[1:891,]
test <- full[892:1309,]
用Pclass 、Sex 、Age、SibSp、Parch 、Fare、Embarked進行建模
- 基於class 函式包knn實現
- 基於caret函式包中的knn3函式實現
- 基於kknn函式包中的kknn函式實現
- 基於ipred函式包中的ipredknn函式實現
- 基於DMwR函式包中的kNN函式實現
相關文章
- 機器學習--有監督學習--分類演算法(預測分類)機器學習演算法
- 機器學習3-分類演算法機器學習演算法
- 機器學習4-分類演算法2機器學習演算法
- 【機器學習】支援向量機分類機器學習
- 從零開始學機器學習——瞭解分類演算法機器學習演算法
- 機器學習演算法筆記之4:貝葉斯分類器機器學習演算法筆記
- 機器學習常用的分類器比較機器學習
- 從零開始學機器學習——初探分類器機器學習
- 如何用機器學習對文字分類機器學習文字分類
- 機器學習之分類:精確率和召回率機器學習
- 機器學習經典演算法之樸素貝葉斯分類機器學習演算法
- 從零開始學機器學習——分類器詳解機器學習
- 機器學習--分類變數編碼方法機器學習變數
- 機器學習十講-第三講分類機器學習
- 機器學習在交通標誌檢測與精細分類中的應用機器學習
- 13 種機器學習演算法概述(附 Python、R 程式碼)機器學習演算法Python
- 機器學習Sklearn系列:(五)聚類演算法機器學習聚類演算法
- 【機器學習】機器學習面試乾貨精講機器學習面試
- 學習筆記——機器學習演算法(一): 基於邏輯迴歸的分類預測筆記機器學習演算法邏輯迴歸
- 機器學習之樸素貝葉斯分類機器學習
- 人工智慧 (02) 機器學習 - 監督式學習分類方法人工智慧機器學習
- 機器學習演算法(一): 基於邏輯迴歸的分類預測機器學習演算法邏輯迴歸
- 機器學習讀書筆記:貝葉斯分類器機器學習筆記
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 【機器學習】--xgboost初始之程式碼實現分類機器學習
- 利用機器學習進行惡意程式碼分類機器學習
- 機器學習入門(六)——評價分類結果機器學習
- 文字分類:Keras+RNN vs傳統機器學習文字分類KerasRNN機器學習
- 《機器學習:演算法原理和程式設計實踐》2:中文文字分類機器學習演算法程式設計文字分類
- 機器學習 – 特徵選擇演算法流程、分類、優化與發展綜述機器學習特徵演算法優化
- 【火爐煉AI】機器學習039-NLP文字分類器AI機器學習文字分類
- 機器學習中的聚類演算法演變及學習筆記機器學習聚類演算法筆記
- 機器學習演算法機器學習演算法
- 機器學習系列之分類機器學習
- 機器學習框架ML.NET學習筆記【6】TensorFlow圖片分類機器學習框架筆記
- 機器學習系列文章:引數方法(最大似然、分類)機器學習
- 機器學習總結(2)—分類中的代數模型機器學習模型
- 機器學習演算法學習筆記機器學習演算法筆記
- 《機器學習Python實現_10_02_整合學習_boosting_adaboost分類器實現》機器學習Python