首页天道酬勤python随机森林算法(随机森林特征选择)

python随机森林算法(随机森林特征选择)

admin 12-04 08:30 694次浏览

00-1010如果模型在训练数据上的表现比在测试数据上好得多,这意味着模型被过度拟合了。过拟合是指模型的参数非常接近训练数据的具体观测值,但训练数据的分布与真实数据的分布不一致,因此模型具有较高的方差。过拟合的原因是训练数据集上的模型过于复杂,我们通常可以通过以下方式减少过拟合:

1.收集更多培训数据。

2.通过正规化引入惩罚条款。

3.选择参数相对较少的简单模型。

4.降低数据的维度。

特征选择不仅可以防止模型过拟合,减少模型的泛化误差,还可以减少硬件资源的损失、模型的开发成本和训练时间。我们将通过正则化和随机森林算法引入特征选择。

00-1010通常使用的正则化包括L1正则化和L2正则化,这两种正则化都将惩罚项添加到成本函数中。不同的是,L1正则化添加的惩罚项是权重绝对值和L2正则化添加的权重平方和的和。L1正则化生成稀疏特征向量,大部分权重为0。如果数据集包含许多不相关的特征,特别是不相关特征的数量大于样本数量时,L1正则化后可以降低模型的复杂度。

进口熊猫作为pd

来自sklearn.linear_model导入后勤导出

来自sklearn.model_selection导入train_test_split

来自sklearn .预处理导入标准缩放器

if __name__=='__main__':

data=PD . read _ CSV(' g :/dataset/wine . CSV ')

#将数据划分为要素和类别标签

x,y=data.ix[:1:],data.ix[:0]

#标准化功能

std=StandardScaler()

x_std=std.fit_transform(x)

#将数据集分为训练集和测试集。

train_x,test_x,train_y,test_y=train_test_split(x_std,y,test_size=0.3,random_state=1)

#使用L1正则化的特征选择

L1模型=物流出口(惩罚='l1 ',C=0.1)

L1_model.fit(train_x,train_y)

#根据训练数据确定模型的准确性。

打印('训练精度: ',L1_model.score(train_x,train_y))

#根据测试数据确定模型的准确性。

打印('测试精度: ',L1_model.score(test_x,test _ y))

通过模型对训练集和测试集的准确性,可以发现模型没有产生任何拟合,因为训练集和测试集的准确性是相似的。

00-1010 #查看物流模型截距

print(L1 _ model . intercept _)

00-1010 #查看模型的权重系数

印刷品(L1 _ model . coef _)

因为我们使用多类别分类的逻辑回归,所以它使用一对多(OVR)方法。第一权重表示类别1相对于类别2和类别3的匹配结果,第二权重表示类别2相对于类别1和类别3的匹配结果,第三权重表示类别3相对于类别1和类别2的匹配结果。可以发现,每个权重有13个数字,其中许多数字的值为0,这些数字是在L1正则化后生成的。这13个数字代表模型在13个权重中的比例,对应的特征系数不为0,代表所选特征。

00-1010 #获取功能的列名,因为第一列代表酒的类别。

data _ cols _ name=data . columns[1:]

#获取第一个特征的系数

coef1=L1_model.coef_[0]

#获取布尔型特征系数的数组,如果不是0,则为真。

coef1_bool=coef1!=0

打印(data_cols_name[coef1_bool])

#获取第二个特征的系数

coef2=L1_model.coef_[1]

coef2_bool=coef2!=0

打印(data_cols_name[coef2_bool])

#获取第三个特征的系数

coef3=L1_model.coef_[2]

coef3_bool=coef3!=0

打印(data_cols_name[coef3_bool])

iaoimg.com/origin/6c3f00058bb859e5269a?from=pc">

3、参数C对于L1正则化的影响

if __name__ == "__main__": data = pd.read_csv("G:/dataset/wine.csv") # 将data分为特征和类标 x, y = data.ix[:, 1:], data.ix[:, 0] # 对特征进行标准化处理 std = StandardScaler() x_std = std.fit_transform(x) # 将数据集分为训练集和测试集 train_x, test_x, train_y, test_y = train_test_split(x_std, y, test_size=0.3, random_state=1) fig = plt.figure() ax = plt.figure(111) colors = ["blue","green","red","cyan", "magenta","yellow","black","pink", "lightgreen","lightblue","gray","indigo", "indigo","organge"] weights,params = [],[] for c in np.arange(-4,6): model = LogisticRegression(penalty="l1",C=float(10)**c,random_state=0) model.fit(train_x,train_y) weights.append(model.coef_[1]) params.append(float(10)**c) weights = np.array(weights) for column,color in zip(range(weights.shape[1]),colors): plt.plot(params,weights[:,column],label=data.columns[column+1],color=color) plt.axhline(0,color="black",linestyle="--",linewidth=3) plt.xlim([10**(-5),10**5]) plt.ylabel("weight coefficent") plt.xlabel("C") plt.xscale("log") plt.legend(loc="upper left") plt.show()

参数C是正则化参数

的倒数,,当C越小的时候,所有参数的权重都接近0。通过上面的图,我们可以发现特征与参数C的变化关系。

三、使用随机森林判断特征的重要性

使用随机森林来判断特征的重要性的时候,不需要考虑特征是否是线性可分的,也不需要对特征做归一化或者标准化处理。通过随机森林算法之后,可以知道每一个特征的重要性,特征的重要性之和为1。

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier import matplotlib.pyplot as plt import numpy as np if __name__ == "__main__": data = pd.read_csv("G:/dataset/wine.csv") #将data分为特征和类标 x,y = data.ix[:,1:],data.ix[:,0] #将数据集分为训练集和测试集 train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3,random_state=1) #定义一个由10000颗决策树组成的随机森林模型 rf_model = RandomForestClassifier(n_estimators=10000,random_state=0,n_jobs=-1) #训练 rf_model.fit(train_x,train_y) #获取特征的重要性 importances = rf_model.feature_importances_ #对特征的重要性进行排序 indices = np.argsort(importances)[::-1] cols_name = data.columns[1:] for f in range(train_x.shape[1]): print("%2d) %-*s %f" % (f + 1,30,cols_name[f],importances[indices[f]])) plt.title("特征的重要性") plt.bar(range(train_x.shape[1]),importances[indices],color="lightblue",align="center") plt.xticks(range(train_x.shape[1]),cols_name,rotation=90) plt.xlim([-1,train_x.shape[1]]) plt.show()

mysql日期函数TO_DAYS()函数怎么使用云原生HTAP数据库两数之和 三数之和 四数之和一网打尽C语言进度条的实现原理是什么
金立s8重复开机(三星s9压感设置在哪里) 网络数通知识点(通信基础知识视频)
相关内容