Kaggle肾结石预测竞赛

今天发现一个易懂友好的竞赛讨论提交代码,本次将以作者新人视角从它的代码中解读kaggle肾结石预测竞赛(经典二分类任务),打开代码实现的起点

本次竞赛的目标训练出target(肾结石的概率)  得到预测概率(target)

数据集以及本文中的代码放在以下链接中(提取码:2424)

百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1OEqCrCOKDEC-1jg3kjxIEQ

原文链接:

肾结石预测 |卡格尔 (kaggle.com)https://www.kaggle.com/code/unstoppablesk/kidney-stone-prediction#Importing-the-libraries

一、导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
二、读取数据集并观察数据
# 进行数据的读取
submission = pd.read_csv('C:\\Users\\24242\\Desktop\\AI_Reference\\data_bag\\playground-series-s3e12\\sample_submission.csv')
data_test = pd.read_csv('C:\\Users\\24242\\Desktop\\AI_Reference\\data_bag\\playground-series-s3e12\\test.csv')
data_train = pd.read_csv('C:\\Users\\24242\\Desktop\\AI_Reference\\data_bag\\playground-series-s3e12\\train.csv')
#%%
# 拿到数据先观察一下数据
data_train.head()

当我们拿到数据时,我们第一应该想到先观察一下整体的数据

data_test.head()

 

在观察完数据之后,我们会发现,最后一行的target呈现出0或1的二分类,所以我们才会想到将target剥离出来当作label(竞赛中也提到了将target作为label)

# 将label与values分开
train_data = data_train.iloc[:,1:6].values
train_label = data_train.iloc[:,-1].values
test_data = data_test.iloc[:,1:6].values

需要注意的是iloc是利用索引 loc可以直接利用标签名

# 统计出0和1
data_train['target'].value_counts()

# 进行直方图图像展示
plt.bar([0,1],list(data_train['target'].value_counts()),width=0.2)
plt.title('values of class label')

三、缩放测试数据值

作为新手阶段对部分函数以及库可能会不太熟悉(包括我),所以推荐sklearn中文文档(因为英文看起来很乏力最近才发现了有这个社区),用最简单粗暴的方式了解对应的函数以及库,链接如下:

API 参考-scikit-learn中文社区Scikit-learn(以前称为scikits.learn,也称为sklearn)是针对Python 编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升,k均值和DBSCAN。Scikit-learn 中文文档由CDA数据科学研究院翻译,扫码关注获取更多信息。http://scikit-learn.org.cn/lists/3.html

#%%
# 开始缩放测试数据
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_transform(train_data)

 为什么要进行数据归一化呢?如何理解数据归一化?

如何理解归一化(normalization)? - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/424518359

四、拆分数据
# 将数据拆分为训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(train_data,train_label,test_size=0.2)
X_train.shape,y_train.shape,X_test.shape,y_test.shape

每次进行训练时,会使用train_test_split快速进行数据的拆分,并设置test_size参数指定测试数据的比例

五、模型训练(SVM)
# 利用SVM进行训练
from sklearn.svm import SVC
model_1 = SVC(kernel='rbf',random_state=42,C=0.5)
model_1.fit(X_train,y_train)
六、测试集预测
y_pred = model_1.predict(X_test)
y_pred

# 将预测到的label与真实的label连接起来
np.concatenate((np.array(y_pred).reshape(len(y_pred),1),np.array(y_test).reshape(len(y_test),1)),1)[:10]

七、 自定义函数来评估模型
# 自定义函数
from sklearn.metrics import accuracy_score,precision_recall_fscore_support

def calculate_results(y_test,y_pred):
    accuracy = accuracy_score(y_true=y_test,y_pred=y_pred)
    precision,recall,fscore,support = precision_recall_fscore_support(y_true=y_test,y_pred=y_pred)
    return {
        'accuracy': accuracy,
        'precision': precision,
        'recall': recall,
        'fscore': fscore,
        'support': support
    }
# 利用自定义函数去计算准确度
model_1_results = calculate_results(y_test,y_pred)
model_1_results

再利用其他模型进行测试

# 利用集成随机森林建立模型预测
from sklearn.ensemble import RandomForestClassifier
model_2 = RandomForestClassifier()
model_2.fit(X_train,y_train)
y_pred1 = model_2.predict(X_test)
y_pred1
model_2_results = calculate_results(y_test,y_pred1)
model_2_results

注意,每一次重新生成执行随机森林分类器时都会得到不一样的accuracy,所以不必担心可以多执行试试多种情况

# K近邻算法模型
from sklearn.neighbors import KNeighborsClassifier
model_3 = KNeighborsClassifier()
model_3.fit(X_train,y_train)

y_pred2 = model_3.predict(X_test)
y_pred2
model_3_results = calculate_results(y_test,y_pred2)
model_3_results

# 决策树模型
from sklearn.tree import DecisionTreeClassifier
model_4 = DecisionTreeClassifier()
model_4.fit(X_train,y_train)

#%%
y_pred3 = model_4.predict(X_test)
y_pred3
model_4_results = calculate_results(y_test,y_pred3)
model_4_results

# Xgboost 竞赛粉碎机
from xgboost import XGBClassifier
model_5 =XGBClassifier(n_estimators=200,learning_rate=0.4,max_depth=8,random_state=42)
model_5.fit(X_train,y_train)
y_pred4 = model_5.predict(X_test)
y_pred4
model_5_results = calculate_results(y_test,y_pred4)
model_5_results

# catboost 提升算法
from catboost import CatBoostClassifier
model_6 = CatBoostClassifier(learning_rate=0.05,depth=8,random_seed=0)
model_6.fit(X_train,y_train)

y_pred5 = model_6.predict(X_test)
y_pred5
model_6_results = calculate_results(y_test,y_pred)
model_6_results

 八、对比所有的模型
# 对比所有算法的结果
results_all = {
    'SVM': model_1_results,
    'RandomForestClassifier': model_2_results,
    'KNN': model_3_results,
    'DecisionTreeClassifier' : model_4_results,
    'XGBClassifier': model_5_results,
    'CatBoostClassifier': model_6_results
}
results_all
results_all_pro = pd.DataFrame(results_all).T
results_all_pro

 九、绘图
# 进行绘图
results_all_pro.loc['accuracy'].plot(kind='bar',title='class of model',xlabel='Model name',ylabel='Accuracy')

观察后下载好模型精度最高得到的csv数据

为什么会选择该为赛友的代码呢?虽然赛友的精确度最终不是最好的,但是代码简洁,像我这种刚入门的小白都能读懂,很好作为入门代码示例以及开启kaggle之路的导航。这次代码阅读能将我们所学的知识用于竞赛实践当中,防止出现学了不会用的窘境。

CT扫描和X射线等医学图像通常是灰度的,这使得微妙的解剖或病理差异更难区分。以下图像处理和增强技术用于着色和改进诊断、训练或人工智能预处理的视觉解释。 1.3D_投标 将医学图像体积渲染为三维可视化。虽然通常是灰度,但颜色可以应用于不同的组织类型或密度,以增强空间理解。可用于手术计划或肿瘤可视化。 2.3D_音量_播放 一种先进的可视化技术,通过透明度和颜色混合投影3D图像体积,模拟光线如何穿过组织。颜色有助于区分器官、血管或肿瘤等内部结构。 3.自适应直方图均衡(AHE) 增强图像内的局部对比度,特别是在低对比度区域。当着色时,不同的强度被映射到不同的色调,提高了软组织或病变等细粒细节的可见性。 4.阿尔法混合 一种将多个图像(如CT+注释掩模)与透明度相结合的分层技术。颜色代表不同的模式或感兴趣的区域,为诊断提供复合视觉线索。 5.基本颜色图 将标准调色板(如Jet或Viridis)应用于灰度数据。不同的强度被映射到不同的颜色,增强了图像中解剖或病理区域的视觉辨别力。 6.对比拉伸 扩展灰度范围以提高亮度和对比度。当与颜色映射相结合时,具有相似强度的组织在视觉上变得不同,有助于骨骼与软组织分离等任务。 7.边缘检测 提取并覆盖原始扫描上的对象边界(例如器官或病变轮廓)。边缘图通常是彩色的(例如,绿色或红色),以清楚地突出解剖结构或异常。 8.伽马校正 非线性调整图像亮度。颜色可用于突出显示曝光不足或曝光过度的区域,通常会显示隐藏在原始灰度CT/X射线图像中的软组织结构。 9.高斯模糊 平滑图像噪声和细节。当使用颜色叠加进行可视化时(例如,前后对比),它有助于评估去噪效果。它还用于分割预处理,以减少边缘伪影。 10.热图可视化 将强度或预测置信度编码到热图覆盖中(例如,红色表示高活动)。在人工智能辅助诊断中很常见
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值