Titanic数据分析项目——Kaggle数据分析项目实战1

目前预测准确度达到77.511%, 会持续优化并且更新。
在这里插入图片描述

一、特征工程:

1、先对缺失值进行填充,先找到缺失值的位置,数值型数据填充众数,字符数据或者是离散型数据则填充出现最多的数据。
2、标准化数值型数据, 根据标准化数据公式:
x standardized = x − mean ( x ) std ( x ) x_{\text{standardized}} = \frac{x - \text{mean}(x)}{\text{std}(x)} xstandardized=std(x)xmean(x)
3、增加特征值:
(1) 票价等级:将票价大于均值的记为1,将票价小于等于均值的记为0,分别表示票价高者和票价低者。
(2) 是否存在亲属:将有亲属的标记位1,无亲属的标记为0。
(3) 同船亲属的数量,将同船的有关系的人数加起来,并且初始化这一列数据。
(4) 同船亲属的数量等级:求出同船亲属数量大于同船亲属数量的均值,记为1,小于等于同船亲属数量,记为0。
(5) 通过对字符型数据也就是"name"那一列的观察与处理,发现会有三种不同的称呼: “Mrs”, “Miss”, “Mr”,分别记为0, 1, -1。
(6) 年龄级别: 将大于平均年龄的记为1,小于等于平均年龄的记为0
(7) 还在思考,后续会进行补充…

特征工程代码实现:

from sklearn.preprocessing import StandardScaler
us_list = ['舱位等级', '性别', '年龄', '同船的兄弟姐妹/配偶数量', '同船的父母/孩子数量', '船票号码', '票价', '船舱号码', '登船港口'] 

#处理数据
def Work_Data(df):
   

    List1 = [] 
    for i in df.index:
        # print(df.loc[i, '姓名'])
        ustr = str(df.loc[i, '姓名'])
        if ustr.find("Mrs") >= 0:
            List1.append(1) 
        elif ustr.find("Miss"):
            List1.append(2) 
        else:
            List1.append(0) 

    df['称呼'] = List1

    for i in df.columns:
        us = df[i].mode()[0] 
        df[i].fillna(us, inplace = True)    
        if isinstance(list(df[i])[0], (int, float)):
            continue
        dic = dict() 
        idx = 0 
        for j in set(df[i]): 
            dic[j] = idx
            idx += 1 
        for j in df.index:
            df.loc[j, i] = dic[df.loc[j, i]] 

    List1 = [] 
    for i in df.index:
        if df.loc[i,'同船的兄弟姐妹/配偶数量'] > 0 or df.loc[i,'同船的父母/孩子数量'] > 0:
            List1.append(1)
        else:
            List1.append(0) 

    df['是否存在亲属'] = List1
    List1 = [] 
    arg_pj = sum(list(df3['票价'])) / len(list(df3['票价'])) 
    for i in df.index:
        if df.loc[i, '票价'] > arg_pj:
            List1.append(1)
        else:
            List1.append(0) 
     
    df['票价等级'] = List1

    us = [] 
    for i in df.index:
        us.append(df.loc[i, '同船的兄弟姐妹/配偶数量'] + df.loc[i, '同船的父母/孩子数量']) 
    x = sum(us) / len(us)
    List1 = []         
    for i in us:
        if i > x:
            List1.append(1)
        else:
            List1.append(0) 
    
    df['同船亲属的数量等级'] = List1

    List1 = [] 
    for i in df.index:
        List1.append(df.loc[i, '同船的兄弟姐妹/配偶数量'] + df.loc[i, '同船的父母/孩子数量']) 

    df['同船有关系的人的数量'] = List1 
    
    List1 = []
    
    x = sum(df['年龄']) / len(df['年龄']) 

    for i in df.index:
        if df.loc[i, '年龄'] > x:
            List1.append(1) 
        else:
            List1.append(0) 
    df['年龄级别'] = List1 

    for i in ['年龄', '票价']:
        scaler = StandardScaler()
        x = [[x] for x in df[i]]
        # 首先拟合 StandardScaler 对象
        scaler.fit(x)
        # 使用 transform 方法对数据进行标准化
        x = scaler.transform(x)
        us = []
        for j in x:
            for k in j:
                us.append(k) 
        df[i] = us


    return df 

二、从数据中处理出测试集和训练集带入模型中

1、先求出测试数据和训练数据:


df = Work_Data(df3) 

df3 = Work_Data(df3)
train_x, train_y = [], [] 

us_list.append("票价等级")
us_list.append("是否存在亲属") 
us_list.append("同船亲属的数量等级")
us_list.append("称呼") 
us_list.append("同船有关系的人的数量") 
us_list.append('年龄级别') 

for i in df.index:
    uslist = [] 
    for j in us_list:
        uslist.append(df.loc[i,j]) 
    train_x.append(uslist) 
    train_y.append(df.loc[i,'是否生还'])
    
# 构造测试集合:
test_x = [] 
df = Work_Data(df2) 
df2 = Work_Data(df2) 

for i in df.index:
    uslist = [] 
    for j in us_list:
        uslist.append(df.loc[i,j]) 
    test_x.append(uslist) 

2、模型带入

(1) 逻辑回归:

研究了一下逻辑回归处理离散型数据的方法,处理离散型数据的逻辑回归方法与处理连续型数据的逻辑回归方法类似

  1. 数据预处理

    • 确保数据中的离散型特征已经被编码为数值类型。可以使用独热编码、标签编码等方法将离散型特征转换为数值型特征。
  2. 模型训练

    • 使用逻辑回归模型训练数据。逻辑回归模型的目标是找到最佳的参数(系数),以最大化似然函数或最小化损失函数。通常使用梯度下降等优化算法来训练模型。
  3. 模型评估

    • 使用测试集评估模型的性能。可以使用各种评估指标,如准确率、精确率、召回率、F1 分数等来评估模型的性能。
  4. 调整模型

    • 根据评估结果,可能需要调整模型的超参数或特征工程方法,以提高模型的性能。
  5. 解释结果

    • 分析模型的系数,了解离散型特征对目标变量的影响。系数的正负和大小可以告诉我们特征对目标变量的影响程度。

    总之,对于二分类问题,无论是离散型数据还是连续型数据逻辑回归都是报错的选择, 因为它都有自己的处理方法。


# 训练逻辑回归模型
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score


# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(train_x)
X_test_scaled = scaler.transform(test_x)

# 初始化逻辑回归模型
log_reg = LogisticRegression()

# 拟合模型
log_reg.fit(X_train_scaled, train_y)


# 预测测试集
y_pred = log_reg.predict(X_test_scaled)
(2) 随机森林:


#随机森林:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

clf = RandomForestClassifier(n_estimators=1000, random_state=42)

# 在训练集上拟合模型
clf.fit(train_x, train_y)

# 在测试集上做出预测
y_pred = clf.predict(test_x)

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense


随缘更新…

Kaggle是一个非常适合初学者去实操实战技能的网站,它提供了各种机器学习项目供用户参与。通过在Kaggle上完成项目,你可以评估自己的得分和排名,从而更清楚地了解自己的能力水平。此外,Kaggle还提供了许多项目教程,可以帮助你学习各种操作并逐步熟悉机器学习的实践。在平时的学习中,我们更多地接触到的是理论知识,缺少实战的平台和项目练习。因此,通过在Kaggle上进行机器学习项目实战,你可以巩固自己的知识,并发现更多有用的技能。\[1\] 在Kaggle上,你可以找到各种机器学习项目,其中包括房价预测项目。在这个项目中,你可以使用各种机器学习算法来预测房价。例如,你可以使用sklearn库中的线性算法,它利用了BLAS算法库,具有高效率和性能优势。相比于集成算法,如GradientBoost等,线性算法的运行时间更短,例如在做CrossValidate和Lasso时只需要20秒左右,而集成算法需要约200~300秒左右。\[2\] 在进行机器学习项目实战时,你可以创建多个模型来进行比较和评估。常见的模型包括K近邻分类器(KNeighborsClassifier)、逻辑回归(LogisticRegression)、高斯朴素贝叶斯分类器(GaussianNB)、决策树分类器(DecisionTreeClassifier)、随机森林分类器(RandomForestClassifier)、梯度提升分类器(GradientBoostingClassifier)和支持向量机分类器(SVC)等。通过创建多个模型并进行比较,你可以找到最适合解决问题的模型。\[3\] #### 引用[.reference_title] - *1* *3* [机器学习实战——kaggle 泰坦尼克号生存预测——六种算法模型实现与比较](https://blog.csdn.net/yangshaojun1992/article/details/106314927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Kaggle机器学习实战总结](https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/78937265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘗_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值