DAY15 超大力王爱学Python

仔细回顾一下之前14天的内容,没跟上进度的同学补一下进度。

作业:

尝试找到一个kaggle或者其他地方的结构化数据集,用之前的内容完成一个全新的项目,这样你也是独立完成了一个专属于自己的项目。

要求:

  1. 有数据地址的提供数据地址,没有地址的上传网盘贴出地址即可。
  2. 尽可能与他人不同,优先选择本专业相关数据集
  3. 探索一下开源数据的网站有哪些?

Titanic - Machine Learning from Disaster | Kaggle

from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from imblearn.over_sampling import SMOTE
import numpy as np
import matplotlib.pyplot as plt

# 读取数据集
df = pd.read_csv('/mnt/train.csv')

# 选取特征和目标变量
X = df[['Pclass', 'Age', 'Fare']].values
y = df['Survived'].values

# 处理特征中的缺失值,这里简单地用均值填充
age_mean = np.nanmean(X[:, 1])
X[:, 1] = np.where(np.isnan(X[:, 1]), age_mean, X[:, 1])

# 特征缩放
min_val = 0.01
max_val = 1.0
scaler = MinMaxScaler(feature_range=(min_val, max_val))
X_scaled = scaler.fit_transform(X)

# 使用 SMOTE 进行过采样
smote = SMOTE(random_state=35)
X_resampled, y_resampled = smote.fit_resample(X_scaled, y)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2, random_state=35)

# 创建随机森林模型
model = RandomForestRegressor(random_state=35)

# 在训练集上训练模型
model.fit(X_train, y_train)

# 在测试集和训练集上进行预测
y_test_pred = model.predict(X_test)
y_train_pred = model.predict(X_train)

# 计算 R² 分数
test_r2 = r2_score(y_test, y_test_pred)
train_r2 = r2_score(y_train, y_train_pred)
print(f"Test R² score: {test_r2:.2f}")
print(f"Train R² score: {train_r2:.2f}")

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 创建散点图
plt.figure(figsize=(6, 6))
plt.subplots_adjust(left=0.2, right=0.8, top=0.8, bottom=0.2)
plt.scatter(y_train, y_train_pred, color='lightcoral', alpha=0.6, label=f'training set R²= {train_r2:.2f}')
plt.scatter(y_test, y_test_pred, color='royalblue', alpha=0.6, label=f'testing set R²= {test_r2:.2f}')

# 绘制理想预测线
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='black', linestyle='--', lw=2)

# 设置坐标轴标签和标题
plt.xlabel('Survived', fontsize=18)
plt.ylabel('Predicted Survived', fontsize=18)
plt.title('RandomForest model', fontsize=18)

# 添加图例
plt.legend()

# 设置刻度标签大小
plt.tick_params(axis='both', labelsize=18)

# 设置字体
plt.rcParams['font.family'] = 'WenQuanYi Zen Hei'

# 设置图例样式
plt.legend(fontsize=14, handlelength=0.2, frameon=0)

# 显示图形
plt.show()

@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值