R基礎(chǔ)與機器學(xué)習(xí)初探

一.R語言基礎(chǔ)

1.1 R的數(shù)據(jù)結(jié)構(gòu)

向量错洁、數(shù)據(jù)框入撒、矩陣屬于最常用的R數(shù)據(jù)結(jié)構(gòu),關(guān)于基礎(chǔ)這里不多講赊瞬,簡單概括一下

向量先煎,簡單來說就是一維數(shù)組

矩陣,就是二維數(shù)組

數(shù)據(jù)框巧涧,簡單理解就是一張excel表薯蝎,或者理解為關(guān)系型數(shù)據(jù)庫的table

1.2 數(shù)據(jù)讀取

讀取csv文件:
read.csv(file="",header=TURE,sep="",stringAsFactors=FALSE)

讀取文本文件:read.table()

從關(guān)系型數(shù)據(jù)庫里讀取數(shù)據(jù)

install.packages("RODBC")           如果安裝時報錯: sudo apt-get install unixODBC;   sudo apt-get install unixODBC-dev

library(RODBC)

mydb <- odbcConnect("my_dsn",uid="username",pwd="password")

query <- "select * from …………"

df <- sqlQuery(channel=mydb,query,stringAsFactors=FALSE)

odbcClose(mydb)

二.數(shù)據(jù)探索

2.1 探索數(shù)據(jù)結(jié)構(gòu)

以一個簡單的圖像識別數(shù)據(jù)為例

df <- read.csv("train.csv")

str(df)
'data.frame': 42000 obs. of 785 variables:
$ label : int 1 0 1 4 0 0 7 3 5 3 ...
$ pixel0 : int 0 0 0 0 0 0 0 0 0 0 ...
$ pixel1 : int 0 0 0 0 0 0 0 0 0 0 ...
$ pixel2 : int 0 0 0 0 0 0 0 0 0 0 ...
$ pixel3 : int 0 0 0 0 0 0 0 0 0 0 ...
$ pixel4 : int 0 0 0 0 0 0 0 0 0 0 ...
$ pixel5 : int 0 0 0 0 0 0 0 0 0 0 ...
$ pixel6 : int 0 0 0 0 0 0 0 0 0 0 ...
dim(df)

[1] 42000   785

head(df)

2.2 探索數(shù)值型變量以及變量關(guān)系

假設(shè)我們還不太了解這個數(shù)據(jù)的特征,那么我們?nèi)绾芜M一步理解這些數(shù)據(jù)呢谤绳?首先我們先來看一下summary(df)

summary(df$label)
Min. 1st Qu. Median Mean 3rd Qu. Max. 
0.000 2.000 4.000 4.457 7.000 9.000

可以看到每一個特征的最大占锯、最小、均值缩筛、中位數(shù)消略、25%、75%瞎抛。

df$label是從0到9的數(shù)字艺演,也就是我們的目標(biāo)值

as.factor(df[,1])將label轉(zhuǎn)換為因子

其他列均為0-255的數(shù)字,共784列桐臊。

這里的數(shù)據(jù)是將手寫數(shù)字0-9的圖像轉(zhuǎn)換為二維矩陣存儲起來钞艇,即784=28*28,首列為數(shù)字標(biāo)簽豪硅。

diff(range(df$pixel358))   某列數(shù)據(jù)最大差值

 IQR(df$pixel668)   Q3-Q1

quantile(df$pixel771,probs = c(0.01,0.99))     查看百分位數(shù)

可視化:

boxplot()

cov()

cor()

aggregate()

pairs()

plot()

CrossTable()

各種統(tǒng)計模型和視圖,包括3D散布圖挺物、熱圖懒浮、等高圖等等以及方差、交叉表、分布模型……

2.3 探索分類變量

table(df$label)    頻率

prop.table(table(df$label))      占比重

2.4 處理數(shù)據(jù)

這里的數(shù)據(jù)時手寫數(shù)字的圖像砚著,我們嘗試將它轉(zhuǎn)化為圖像次伶。

我們來看低40張數(shù)字:

im <- matrix(as.matrix(df[40,-1]),nrow = 28,ncol = 28)

image(1:28, 1:28, im, col=gray((0:255)/255))

圖像是個反著的數(shù)字4,很容易認(rèn)出來稽穆。那個機器如何識別出來呢冠王?

三.算法嘗試之隨機森林

分類算法多種多樣,我們可以選擇很多種分類器來做分類舌镶。這里我們嘗試一下隨機森林算法柱彻。

R里面有randomForest(局限性比較大)包,可以做簡單的隨機森林算法嘗試餐胀。party包也有cforest函數(shù)哟楷。

df <- read.csv("train.csv")
df$label <- as.factor(df$label)
ind <- sample(2,nrow(df),replace=TRUE,prob=c(0.8,0.2))          #隨機取樣,分為訓(xùn)練數(shù)據(jù)80%與測試數(shù)據(jù)20%
trainData <- df[ind==1,]
testData <- df[ind==2,]
rf <- randomForest(label ~ .,data=trainData,ntree=50,proximity=TRUE)     70M數(shù)據(jù)否灾,80%訓(xùn)練數(shù)據(jù)卖擅,大概需要20多G內(nèi)存,
plot(rf)    #樹圖
importance(rf)          #特征重要性
rfPred <- predict(rf,testData)               #預(yù)測
table(rfPred,testData$label)              
prop.table(table(rfPred,testData$label))  

就是這樣一個簡單的流程墨技,都沒用到自己寫什么優(yōu)化方案或者建模惩阶,測試分類正確率可以達(dá)到96%還多,對于新給的test.csv(大概50M測試數(shù)據(jù)扣汪,模型的表現(xiàn)可以達(dá)到96%的正確率)断楷。當(dāng)然,可以選擇的算法和優(yōu)化方案很多私痹,上面寫的只是一個探索的流程脐嫂。其實做一些優(yōu)化后,準(zhǔn)確率可以達(dá)到99%紊遵。

四.算法嘗試之kNN

關(guān)于乳腺癌預(yù)測的數(shù)據(jù)

數(shù)據(jù)探索就簡單略過了账千,數(shù)據(jù)第一列沒什么用,刪除wbcd <- wbcd[-1]

第二列是因子(B,M)暗膜,表示癌癥的陰性和陽性

剩余30個特征都是細(xì)胞的一些物理特征匀奏,算法的目的是通過細(xì)胞的特征來判斷癌癥的陰性和陽性

4.1 數(shù)據(jù)處理

wbcd <- read.table("wdbc.data",header = FALSE,sep = ",")

wbcd <- wbcd[-1]

因為kNN算法是依據(jù)距離來計算的,一般用歐式距離比較易懂学搜。所以這里涉及到數(shù)據(jù)的轉(zhuǎn)換娃善。

min-max標(biāo)準(zhǔn)化:(x-min(x))/(max(x)-min(x))  #把數(shù)值型數(shù)據(jù)轉(zhuǎn)換到0-1之間,必選數(shù)據(jù)范圍的影響

z-score標(biāo)準(zhǔn)化:(x-mean(x))/StdDev(x)   

4.2 數(shù)據(jù)準(zhǔn)備

library(class)

wbcd <- read.table("wdbc.data",header = FALSE,sep = ",")

wbcd <- wbcd[-1]

normalize <- function(x) {
    return ((x-min(x))/(max(x)-min(x)))
}

wbcd_n <- as.data.frame(lapply(wbcd[,2:31],normalize))

ind <- sample(2,nrow(wbcd_n),replace = TRUE,prob = c(0.8,0.2))

wbcd_pred <- knn(train.data,test.data,wbcd[ind==1,1],k = 10)

CrossTable(x = wbcd_n[ind==2,1],wbcd_pred,prop.chisq = FALSE)

    otal Observations in Table: 117
| wbcd_pred 
wbcd[ind == 2, 1] | B | M | Row Total | 
------------------|-----------|-----------|-----------|
B | 74 | 0 | 74 | 
| 1.000 | 0.000 | 0.632 | 
| 0.961 | 0.000 | | 
| 0.632 | 0.000 | | 
------------------|-----------|-----------|-----------|
M | 3 | 40 | 43 | 
| 0.070 | 0.930 | 0.368 | 
| 0.039 | 1.000 | | 
| 0.026 | 0.342 | | 
------------------|-----------|-----------|-----------|
Column Total | 77 | 40 | 117 | 
| 0.658 | 0.342 | | 
------------------|-----------|-----------|-----------|

還可以通過選擇k值瑞佩,不同的數(shù)據(jù)標(biāo)準(zhǔn)化聚磺,不同的算法,不同的特征來優(yōu)化準(zhǔn)確率炬丸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘫寝,一起剝皮案震驚了整個濱河市蜒蕾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焕阿,老刑警劉巖咪啡,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暮屡,居然都是意外死亡撤摸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門褒纲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來准夷,“玉大人,你說我怎么就攤上這事外厂∶嵯螅” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵汁蝶,是天一觀的道長渐扮。 經(jīng)常有香客問我,道長掖棉,這世上最難降的妖魔是什么墓律? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮幔亥,結(jié)果婚禮上耻讽,老公的妹妹穿的比我還像新娘。我一直安慰自己帕棉,他們只是感情好针肥,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著香伴,像睡著了一般慰枕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上即纲,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天具帮,我揣著相機與錄音,去河邊找鬼低斋。 笑死蜂厅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膊畴。 我是一名探鬼主播掘猿,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唇跨!你這毒婦竟也來了稠通?” 一聲冷哼從身側(cè)響起礁遵,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎采记,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體政勃,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡唧龄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奸远。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片既棺。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖懒叛,靈堂內(nèi)的尸體忽然破棺而出丸冕,到底是詐尸還是另有隱情,我是刑警寧澤薛窥,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布胖烛,位于F島的核電站,受9級特大地震影響诅迷,放射性物質(zhì)發(fā)生泄漏佩番。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一罢杉、第九天 我趴在偏房一處隱蔽的房頂上張望趟畏。 院中可真熱鬧,春花似錦滩租、人聲如沸赋秀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猎莲。三九已至,卻和暖如春蜘欲,著一層夾襖步出監(jiān)牢的瞬間益眉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工姥份, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留郭脂,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓澈歉,卻偏偏與公主長得像展鸡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埃难,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容