作业7.逻辑回归实践
1.逻辑回归是怎么防止过拟合的?为什么正则化可以防止过拟合?(大家用自己的话介绍下)
(1)增加样本量,这是万能的方法,适用任何模型
(2)通过特征选择,剔除一些不重要的特征,从而降低模型复杂度
(3) 逻辑回归特有的防止过拟合方法:进行离散化处理,所有特征都离散化
(4)算法层面-正则化:
L1正则,通过增大正则项导致更多参数为0,参数系数化降低模型复杂度,从而抵抗过拟合。
L2正则,通过使得参数都趋于0,变得很小,降低模型的抖动,从而抵抗过拟合
特征变量过多会导致过拟合,为了防止过拟合会选择一些比较重要的特征变量,而删掉很多次要的特征变量。但是,如果我们实际上却希望利用到这些特征信息,所以可以添加正则化项来约束这些特征变量,使得这些特征变量的权重很小,接近于0,这样既能保留这些特征变量,又不至于使得这些特征变量的影响过大。
2.用logiftic回归来进行实践操作,数据不限。
我是用logiftic回归来预测研究生入学是否被录取:
代码如下:
#预测研究生入学考试是否会被录取 import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report #用于查看模型的分类报告 #(1)数据读取与预处理 df = pd.read_csv('./datas/研究生数据.csv')#导入数据 x = df.iloc[:,1:] #取数据的所有行,除第一列的所有列 y =df.iloc[:,0] #取数据所行,第一列 # train_test_split()是sklearn包的model_selection模块中提供的随机划分训练集和测试集的函数; # 使用train_test_split函数可以将原始数据集按照一定比例划分训练集和测试集对模型进行训练 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=5) # (2)构建逻辑回归模型 LR_model = LogisticRegression() # (3)训练模型 LR_model.fit(x_train,y_train) # (4)预测模型 pre = LR_model.predict(x_test) print('正确率:',LR_model.score(x_test,y_test)) print('分类报告:\n',classification_report(y_test,pre)) # 精确度:precision,正确预测为正的,占全部预测为正的比例,TP / (TP+FP) # 召回率:recall,正确预测为正的,占全部实际为正的比例,TP / (TP+FN) # F1-score:精确率和召回率的调和平均数,2 * precision*recall / (precision+recall) # 同时还会给出总体的微平均值,宏平均值和加权平均值。 # 微平均值:micro average,所有数据结果的平均值 # 宏平均值:macro average,所有标签结果的平均值 # 加权平均值:weighted average,所有标签结果的加权平均值结果如图: