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


    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();

    结果:

  • 相关阅读:
    将本地文件夹添加到Git仓库
    flex调用Webservice(一)
    经典的sql
    打印相关
    reporting services订阅
    关于TabIndex
    试题(一)
    试试用手机
    2010.07.13_19:30
    基础知识
  • 原文地址:https://www.cnblogs.com/xiaoAP/p/12801259.html
Copyright © 2020-2023  润新知