1.逻辑回归是怎么防止过拟合的?为什么正则化可以防止过拟合?(大家用自己的话介绍下)
(1)逻辑回归是怎么防止过拟合的?
利用正则化来防止过拟合。正则化可以有更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好
(2)为什么正则化可以防止过拟合?
过拟合的时候,拟合函数的系数往往非常大,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
实现代码:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
from sklearn.linear_model import LogisticRegression
def logistic():
data = pd.read_csv(r'C:\Users\小天话\PycharmProjects\201706120013\陈奕霖\test\titanic_data.csv')
data.drop('PassengerId', axis=1, inplace=True) # inplace对原始数据替换,删除PassengerId这一列
data.loc[data['Sex'] == 'male', 'Sex'] = 1 # 用数值1替换male
data.loc[data['Sex'] == 'female', 'Sex'] = 0 # 用数值0替换
data.fillna(data['Age'].mean(), inplace=True)#用Age均值填充该列的缺失值
print(data)
x = data.iloc[:, 1:] # 取出训练数据
y = data.iloc[:, 0] # 取出目标值
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)#按照0.3比例划分训练集和测试集
std = StandardScaler()#进行数据预处理,使得数据标准化
x_train=std.fit_transform(x_train)
x_test=std.transform(x_test)
lg=LogisticRegression()#构建模型
lg.fit(x_train,y_train)#委屈数据
lg_pre=lg.predict(x_test)#预测数据
print('准确率:',lg.score(x_test,y_test))
print('召回率:',classification_report(y_test,lg_pre))
if __name__=='__main__':
logistic();