本文主要是介绍调权重的结果和人工合成数据的结果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
非平衡数据会影响最后的评判效果,严重的会带来过拟合的效果,即模型总是把样本划分到样本量较多的那一种。为了让模型的评判更准确,我们需要对非平衡数据进行一定的处理,主要有以下几种方式:
- 欠采样
- 过采样
- 人工合成
- 调权重
在开始介绍不同的处理方式之前,我们先引入一组非平衡数据。
-
#导入一些相关库
-
from sklearn.model_selection import train_test_split
-
from sklearn.linear_model import LogisticRegression
-
from sklearn.metrics import classification_report
-
from sklearn.metrics import roc_curve, auc
-
from sklearn.preprocessing import scale
-
#导入数据
-
df=pd.read_excel(r"C:\Users\zhangjunhong\Desktop\Unbanlanced-data.xlsx").fillna(0)
- 1
看一下正负样本的具体数据量情况。
-
x=df.iloc[:,1:-1]
-
y=df["label"]
-
print(y.value_counts())
-
print("-------------------------")
-
print(y.value_counts(normalize=True))
- 1
该数据量的正负样本比例接近7:3,我们看一下不做任何处理的情况下,模型的预测效果如何。
-
#将模型进行封装,方便调用
-
def get_result_data(x,y):
-
x_=scale(x,with_mean=True,with_std=True)
-
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_state=0)
-
model=LogisticRegression()
-
clf=model.fit(x_train,y_train)
-
print("LR模型测试成绩:{:.2f}".format(clf.score(x_test,y_test)))
-
y_p
这篇关于调权重的结果和人工合成数据的结果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!