2017-09-10 204 views
2

我正嘗試爲二項分類構建一個隨機森林分類器。有人可以解釋爲什麼我每次運行此程序時準確度得分都會有所變化分數在68% - 74%之間變化。此外,我嘗試調整參數,但我無法獲得超過74的準確度。對此的任何建議也將不勝感激。我嘗試使用GridSearchCV,但我只管理了一個體面的3點增加。隨機森林分類器

#import libraries 
import numpy as np 
import pandas as pd 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.metrics import accuracy_score 
from sklearn import preprocessing 

#read data into pandas dataframe 
df = pd.read_csv("data.csv") 

#handle missing values 
df = df.dropna(axis = 0, how = 'any') 

#handle string-type data 
le = preprocessing.LabelEncoder() 
le.fit(['Male','Female']) 
df.loc[:,'Sex'] = le.transform(df['Sex']) 

#split into train and test data 
df['is_train'] = np.random.uniform(0, 1, len(df)) <= 0.8 
train, test = df[df['is_train'] == True], df[df['is_train'] == False] 

#make an array of columns 
features = df.columns[:10] 

#build the classifier 
clf = RandomForestClassifier() 

#train the classifier 
y = train['Selector'] 
clf.fit(train[features], train['Selector']) 

#test the classifier 
clf.predict(test[features]) 

#calculate accuracy 
accuracy_score(test['Selector'], clf.predict(test[features])) 
accuracy_score(train['Selector'], clf.predict(train[features])) 
+0

鏈接數據集:https://archive.ics.uci.edu/ml/datasets/ILPD+(Indian+Liver+Patient+Dataset) – TheBeginner

+0

爲了提高你的模型,我建議你使用合奏,也嘗試XGBoost。 –

回答

1

由於創建的模型不同,每次運行程序時精度都會發生變化。和模型是不同的,因爲你創建它時沒有修復隨機狀態。查看scikit-learn documentationrandom_state參數。

對於第二個問題,有很多事情可以嘗試以提高模型的準確性。按重要性排序:

  • 獲取更多的訓練數據
  • 提高你的訓練數據(即擺脫低質量的功能或樣品,創造新的功能...)
  • 調整你的學習算法的參數(RandomForest有幾個玩)
  • 嘗試另一種學習模式。
  • 嘗試結合不同型號
+0

我試圖調整參數,最後在:n_jobs = -1,n_estimators = 75,min_samples_leaf = 25,random_state = 42,oob_score = True。但是我仍然得到不同的準確度值:Out [472]:0.75221238938053092,Out [474]:0.68965517241379315 – TheBeginner