Machine learning 随机森林分类器

Machine learning 随机森林分类器,machine-learning,random-forest,data-analysis,grid-search,Machine Learning,Random Forest,Data Analysis,Grid Search,我正在尝试为二项分类构建一个随机森林分类器。有人能解释为什么每次我运行这个程序时,我的准确度分数都会变化吗?分数在68%-74%之间变化。此外,我尝试调整参数,但我无法获得超过74的精度。如果您对此有任何建议,我们将不胜感激。我试着使用GridSearchCV,但我只成功地提高了3个百分点 #import libraries import numpy as np import pandas as pd from sklearn.ensemble import RandomForestClassi

我正在尝试为二项分类构建一个随机森林分类器。有人能解释为什么每次我运行这个程序时,我的准确度分数都会变化吗?分数在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]))
#导入库
将numpy作为np导入
作为pd进口熊猫
从sklearn.employ导入随机林分类器
从sklearn.metrics导入准确性\u分数
从sk学习导入预处理
#将数据读入数据帧
df=pd.read\u csv(“data.csv”)
#处理缺少的值
df=df.dropna(axis=0,how='any')
#处理字符串类型数据
le=预处理。LabelEncoder()
le.fit([‘男性’,‘女性’]))
df.loc[:,'Sex']=le.transform(df['Sex'])
#分为列车和测试数据

df['is_train']=np.random.uniform(0,1,len(df))由于创建的模型不同,每次运行程序时,精度都会发生变化。模型是不同的,因为在创建随机状态时,您没有修复它。查看中的
random_state
参数

对于第二个问题,您可以尝试许多方法来提高模型的准确性。按重要性顺序:

  • 获取更多培训数据
  • 改进您的培训数据(即,去除低质量的功能或样本,创建新功能…)
  • 调整学习算法的参数(RandomForest有一些可供使用)
  • 尝试另一种学习模式
  • 尝试组合不同的模型

链接到数据集:为了改进您的模型,我建议您使用集合并尝试XGBoost。我试图调整参数,结果是:n_jobs=-1,n_estimators=75,min_samples_leaf=25,random_state=42,oob_score=True。但我还是得到了不同的精度值:Out[472]:0.75221238938053092,Out[474]:0.68965517241379315如果我读对了你的代码,你的训练/测试拆分器也是随机的(你可以使用sklearn.model\u selection import train\u test\u split
,它接受一个
随机状态
参数)