机器学习七——逻辑回归实践

EchoYY 2020-04-29

1.逻辑回归是怎么防止过拟合的?为什么正则化可以防止过拟合?(大家用自己的话介绍下)

什么是过拟合?关于这个百度了一下,知乎上有一些很有趣的回答(https://www.zhihu.com/question/32246256

就像是我们高三在刷题的过程中,你刷遍了所有的题,但考试的时候改了点数字你就做不出来了,你刷题刷出来的做题模式就类似一个过拟合的模型。

过拟合产生的原因在于数据量太少而变量过多,虽然可以拟合所有数据样本,但拟合出来的模型曲线比较曲折,无法对其他的数据做出正确的预测(以下图片来自https://blog.csdn.net/quiet_girl/article/details/70243583

另附上学习博客(https://blog.csdn.net/quiet_girl/article/details/70185041?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7

机器学习七——逻辑回归实践

知晓什么是过拟合及造成过拟合的原因后,该怎么去防止过拟合呢?

针对造成的原因,可以通过增大数据量并手动减少特征数,但在舍弃特征也会丢掉有用的信息。因此,我们通过引入一个λ来降低θ的值,来减少不重要的特征值对拟合的影响,即正则化,但我们不惩罚θ0,因为 照约定θ0是最大的。具体如下图所示:

机器学习七——逻辑回归实践

λ的值要适当,太大会造成欠拟合。

2.用logiftic回归来进行实践操作,数据不限。

 以下用泰坦尼克号船只上人员的生还数据做预测

导入包:

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(‘./titanic_data.csv‘)

    # 数值型转换,性别女为0 男为1,有缺失值的行直接删除,删除我觉得毫无影响的id列
    data.loc[data[‘Sex‘] == ‘male‘, ‘Sex‘] = 0
    data.loc[data[‘Sex‘] == ‘female‘, ‘Sex‘] = 1
    data = data.dropna()
    data = data.drop(columns=["PassengerId"],axis = 1)
    print(data)

    # 训练集和测试集划分
    x_train, x_test, y_train, y_test = train_test_split(data.iloc[:, 1:], data.iloc[:, 0], test_size=0.3)

    # 特征值和目标值进行标准化处理(需要分别处理),实例标准化API
    std = StandardScaler()

    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)

    # 逻辑回归预测
    lg = LogisticRegression()
    lg.fit(x_train, y_train)
    print(lg.coef_)
    lg_predict = lg.predict(x_test)
    print(‘准确率:‘, lg.score(x_test, y_test))
    print(‘召回率:‘, classification_report(y_test, lg_predict, target_names=[‘生还‘, ‘离世‘]))


if __name__ == ‘__main__‘:
    logistic();

结果:

机器学习七——逻辑回归实践

相关推荐