1. 程式人生 > >隨機森林二分類建模

隨機森林二分類建模

由於對r相對比較熟悉,先用的r處理資料,但是跑模型太慢,因此用py跑的模型。用了邏輯迴歸和隨機森林,顯然後者要好很多,因為維度一千多個,而且邏輯迴歸要涉及到更詳細的特徵處理,第一部分是r程式碼,第二部分是py

一 r code

rm(list=ls())

library(caret)
train_x<-read.csv("train_x.csv",header=T)#讀取x
train_y<-read.csv("train_y.csv",header=T)#讀取y
train<-merge(train_x,train_y,by.x="uid",by.y="uid")#合併x和y


rep<-train[train$y==0,]
for (i in 1:6){
  rep<-rbind(rep,train[train$y==0,])
}#生成向上樣本
train_add<-rbind(train,rep)#形成新新增7次負樣本總數的樣本


train_add_1<-train_add[,1]#存放合併以及增加樣本後的uid
train_add_y<-train_add[,c(1,1140)]#存放合併以及增加樣本後的y
names(train_add_y)<-c("uid","y")


train_add_x<-train_add[,-c(1,1140)]#提取需要進行清洗的變數(去掉uid和Y值)




zerovar <- nearZeroVar(train_add_x)#找出近似常量的變數
newdata1 <- train_add_x[,-zerovar]#去掉近似常量的變數
descrCorr <- cor(newdata1)#求出相關矩陣
highCorr <- findCorrelation(descrCorr, 0.90)#找出相關性強的變數
newdata2 <- newdata1[, -highCorr]#刪除相關性強的變數
comboInfo = findLinearCombos(newdata2)#找出線性相關性強的變數
newdata2=newdata2[, -comboInfo$remove]#刪除相關性強的變數
Process <- preProcess(newdata2)#資料預處理步驟(標準化,缺失值處理)
newdata3 = predict(Process, newdata2)


train_add_haveuid<-cbind(train_add_1,newdata3)


names(train_add_haveuid)[1]<-"uid"




train1<-merge(train_add_haveuid,train_add_y,by.x="uid",by.y="uid")#合併資料
names(train1)

write.csv("清洗好的訓練資料.csv")

二 py code

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 09 13:23:36 2015


@author: Tanya_girl
"""


import sklearn
import os
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression 
os.getcwd()
os.chdir("D:\\competitions\\datacastle\\p2p")
train1=pd.read_csv("ok_train_without2.csv")
test1=pd.read_csv("ok_test_without2.csv")


y=train1['y']
x=train1.ix[:,:619]
x1=test1.ix[:,:619]
y1=test1['y']


print x.head()


clf = RandomForestClassifier(n_jobs=8)
s=clf.fit(x, y)


clf = LogisticRegression()
s1=clf.fit(x, y) 




y_rd_pred = s.predict(x1)
y_lg_pred=s1.predict(x1)


tab_rd=pd.crosstab(y1,y_rd_pred,rownames=['actual'],colnames=['preds'])
tab_lg=pd.crosstab(y1,y_lg_pred,rownames=['actual'],colnames=['preds'])
print tab_rd,tab_lg


putin_x_filter=pd.read_csv("putin_x_filter1.csv") #讀取測試資料
putin_rd_pred=s.predict(putin_x_filter)#獲得隨機森林預測結果
putin_lg_pred=s1.predict(putin_x_filter)#獲得邏輯迴歸預測結果


result = pd.DataFrame(putin_lg_pred)#邏輯迴歸結果轉化成pandas資料框
result.to_csv("predictions.csv", index=False)#輸出預測結果到predictions檔案


result = pd.DataFrame(putin_rd_pred)#邏輯迴歸結果轉化成pandas資料框
result.to_csv("predictions_rd.csv", index=False)#輸出預測結果到predictions_rd檔案

這裡截取了兩次交叉驗證結果,第一個為隨機森林,明顯要比邏輯迴歸好很多。這裡強調不是邏輯迴歸不好,而是應該對特徵工程要求更加嚴格。


















相關推薦

隨機森林分類建模

由於對r相對比較熟悉,先用的r處理資料,但是跑模型太慢,因此用py跑的模型。用了邏輯迴歸和隨機森林,顯然後者要好很多,因為維度一千多個,而且邏輯迴歸要涉及到更詳細的特徵處理,第一部分是r程式碼,第二部分是py 一 r code rm(list=ls()) library(c

機器學習實戰-隨機森林分類問題

lena elf 線性 評估 形式 www. 分類器 and 數據 隨機森林 概論 前提 Random Forest:可以理解為Bagging with CARTS. Bagging是bootstrap aggregating(引導聚集算法)的縮寫。 CART(c

基於隨機森林分類與迴歸

一、隨機森林基本概念隨機森林(Random forest) 是一種組成式的有監督學

吳裕雄 python 機器學習——集成學習隨機森林RandomForestClassifier分類模型

pan spa data ica ima 數據 app ase lower import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble fro

基於隨機森林的化合物活性分類模型

#匯入依賴包 import pandas as pd import numpy as np from rdkit import Chem, DataStructs from rdkit.Chem

【火爐煉AI】機器學習051-視覺詞袋模型+極端隨機森林建立圖像分類

函數 自然語言處理 3.6 權重 www. 語言 tar 一行 序列 【火爐煉AI】機器學習051-視覺詞袋模型+極端隨機森林建立圖像分類器 (本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, mat

OpenCV3 SVM ANN Adaboost KNN 隨機森林等機器學習方法對OCR分類

轉摘自http://www.cnblogs.com/denny402/p/5032839.html opencv3中的ml類與opencv2中發生了變化,下面列舉opencv3的機器學習類方法例項: 用途是opencv自帶的ocr樣本的分類功能,其中神經網路和adaboost訓練速度很慢,效

DL之RNN:基於TF利用RNN實現簡單的序列資料型別(DIY序列資料集)的分類(線性序列&隨機序列)

DL之RNN:基於TF利用RNN實現簡單的序列資料型別(DIY序列資料集)的二分類(線性序列&隨機序列) 序列資料型別&輸出結果 1、test01:training_iters = 1000000 (32, 20, 1) [[0.336], [

利用scikit-learn庫實現隨機森林分類演算法

自己實踐一下在本章學到一些方法   首先實踐核心的部分,怎麼實現一個分類模型,並通過驗證曲線去優化模型,最後使用訓練出來的模型進行預測 In [20]:

python實現隨機森林、邏輯回歸和樸素貝葉斯的新聞文本分類

ati int ces 平滑 讀取 inf dict http tor 實現本文的文本數據可以在THUCTC下載也可以自己手動爬蟲生成, 本文主要參考:https://blog.csdn.net/hao5335156/article/details/82716923 nb表

基於邏輯迴歸/決策樹/隨機森林/多層感知分類器/xgboost/樸素貝葉斯分類的資訊多分類效能對比

在上一篇(https://blog.csdn.net/baymax_007/article/details/82748544)中,利用邏輯迴歸實現資訊多分類。本文在之前基礎上,又引入決策樹、隨機森林、多層感知分類器、xgboost和樸素貝葉斯分類演算法,並對驗證集和測試集分類

整合學習和隨機森林——自學第十

1、整合學習 在面臨選擇的時候需要作出決策,這時候你就會去詢問不同的人該做怎樣的決斷,最後將詢問後的決策進行投票,選擇投票個數最多的那個。對同一個問題,可以有不同的演算法,也會給出不同的結果,在這種情況下,可以整合不同的演算法,少數服從多數,選擇結果數最多的那類

DL之RNN:基於TF利用RNN實現簡單的序列資料型別(DIY序列資料集)的分類(線性序列&隨機序列)

DL之RNN:基於TF利用RNN實現簡單的序列資料型別(DIY序列資料集)的二分類(線性序列&隨機序列) 輸出結果 1、test01:training_iters = 1000000 (3

scikit-learn /sklearn : 整合學習 之 隨機森林分類器(Forests of Randomized Tree)官方檔案翻譯

整合學習 之 隨機森林分類器 整合學習的定義和分類。 隨機森林法的定義和分類。 隨機森林sklearn.ensemble.RandomForestClassifier()引數分類和含義。 附註:Bias和Variance的含義和關係。 一、整合學習 (Ensemble

Spark隨機森林演算法對資料分類(一)——計算準確率和召回率

1.召回率和正確率計算 對於一個K元的分類結果,我們可以得到一個K∗K的混淆矩陣,得到的舉證結果如下圖所示。 從上圖所示的結果中不同的元素表示的含義如下: mij :表示實際分類屬於類i,在預測過程中被預測到分類j 對於所有的mij可以概括為四種方式

機器學習之分類器——Matlab中各種分類器的使用總結(隨機森林、支援向量機、K近鄰分類器、樸素貝葉斯等)

      Matlab中常用的分類器有隨機森林分類器、支援向量機(SVM)、K近鄰分類器、樸素貝葉斯、整合學習方法和鑑別分析分類器等。各分類器的相關Matlab函式使用方法如下:首先對以下介紹中所用到的一些變數做統一的說明:    train_data——訓練樣本,矩陣的每

EL之RF(RFC):利用RF對分類問題進行建模並評估

EL之RF(RFC):利用RF對二分類問題進行建模並評估 輸出結果   設計思路   核心程式碼 auc = [] nTreeList = range(50, 2000, 50) for iTrees in nTreeList:

EL之GB(GBC):利用GB對分類問題進行建模並評估

EL之GB(GBC):利用GB對二分類問題進行建模並評估 輸出結果 T1、純GB演算法 T2、以RF為基學習器的GB演算法         設計思路   核心程式碼

spark mllib原始碼分析之隨機森林(Random Forest)(

4. 特徵處理 這部分主要在DecisionTree.scala的findSplitsBins函式,將所有特徵封裝成Split,然後裝箱Bin。首先對split和bin的結構進行說明 4.1. 資料結構 4.1.1. Split cl

隨機森林分類和adaboost分類方法的異同之處

隨機森林和adaboost演算法都可以用來分類,它們都是優秀的基於決策樹的組合演算法。相對於經典線性判別分析,其分類效果一般要好很多。 下說明這兩種分類方法的相同和不同之處: 1,相同:二者都是bo