机器学习速成第二集——监督学习之回归+数据处理(实践部分)!

 

目录

 数据预处理

数据清洗

处理缺失值:

异常值检测与处理:

类别特征编码:

特征工程

创建新特征:

特征缩放:

探索性数据分析 (EDA)

使用Matplotlib进行可视化

绘制直方图:

绘制箱线图:

绘制散点图:

构建简单的机器学习模型

准备数据

划分训练集和测试集:

特征缩放:

训练模型

使用线性回归模型:

评估模型

计算模型的性能指标:

实战项目

项目步骤

 代码实操示例

生成图片

单变量分析:

多变量分析:

条形图:

散点图:

热力图:

数据加载与初步检查

探索性数据分析 (EDA)

数据可视化

数据准备

特征选择

目标变量

模型选择

示例代码

​编辑分析结果


 数据预处理

数据预处理是机器学习流程中非常重要的一步,它包括数据清洗、特征工程等步骤。

数据清洗
  • 处理缺失值
    # 使用中位数填充缺失值
    df['Age'].fillna(df['Age'].median(), inplace=True)
  • 异常值检测与处理
    # 使用IQR方法检测异常值
    Q1 = df['Age'].quantile(0.25)
    Q3 = df['Age'].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    df = df[(df['Age'] >= lower_bound) & (df['Age'] <= upper_bound)]
  • 类别特征编码
    # 使用one-hot编码
    df = pd.get_dummies(df, columns=['Gender'], drop_first=True)
特征工程
  • 创建新特征
    df['Total_Pay'] = df['Base_Pay'] + df['Bonus']
  • 特征缩放
    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(df[['Age', 'Salary']])
    df[['Age', 'Salary']] = scaled_features

探索性数据分析 (EDA)

EDA 是为了更好地理解数据集的特性。我们可以使用可视化工具来辅助这一过程。

使用Matplotlib进行可视化
  • 绘制直方图
    import matplotlib.pyplot as plt
    
    plt.hist(df['Age'], bins=20)
    plt.title('Age Distribution')
    plt.xlabel('Age')
    plt.ylabel('Count')
    plt.show()
  • 绘制箱线图
    df.boxplot(column='Salary')
    plt.title('Salary Distribution')
    plt.show()
  • 绘制散点图
    plt.scatter(df['Age'], df['Salary'])
    plt.title('Age vs Salary')
    plt.xlabel('Age')
    plt.ylabel('Salary')
    plt.show()

构建简单的机器学习模型

现在我们有了清理过后的数据,可以开始构建机器学习模型了。这里我们将使用线性回归模型作为示例。

准备数据
  • 划分训练集和测试集
    from sklearn.model_selection import train_test_split
    
    X = df[['Age', 'Experience']]
    y = df['Salary']
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 特征缩放
    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)
训练模型
  • 使用线性回归模型
    from sklearn.linear_model import LinearRegression
    
    model = LinearRegression()
    model.fit(X_train, y_train)
评估模型
  • 计算模型的性能指标
    from sklearn.metrics import mean_squared_error, r2_score
    
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    
    print(f'Mean Squared Error: {mse}')
    print(f'R2 Score: {r2}')

实战项目

为了更好地巩固所学的知识,你可以尝试完成一个小的实战项目。例如,这下面是我从Kaggle网站下载一个数据集,对其进行预处理、特征工程、EDA,并最终训练一个简单的机器学习模型。

项目步骤
  1. 数据加载:使用Pandas加载数据。
  2. 数据清洗:处理缺失值、异常值。
  3. 特征工程:创建新特征、进行特征缩放。
  4. EDA:使用Matplotlib进行可视化。
  5. 模型训练:使用Scikit-Learn训练模型。
  6. 模型评估:使用适当的指标评估模型性能。
 代码实操示例
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#加载数据
data_path=r'D:\机器学习\数据集:国家划分的生活成本\Cost_of_Living_Index_by_Country_2024.csv'
df=pd.read_csv(data_path)
#显示数据前几行
print(df.head())
#检查是否有缺失值
print(df.isnull().sum())
#基本统计信息
print(df.describe())
#可视化
#单变量分析
df.hist(bins=20,figsize=(12,10),color='blue')
plt.tight_layout()  #调整子图参数,使之填充整个图像区域
plt.show()
#多变量分析
numeric_df = df.select_dtypes(include=['float64', 'int64'])
corr_matrix=numeric_df.corr()
sns.heatmap(corr_matrix,annot=True,cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
# #保存图片
# plt.savefig('8.11Cost_of_Living_Index_by_Country_2024.png')
#柱状图-排名前十的国家的生活成本指数
top_10_countries=df.head(10)
plt.figure(figsize=(12,6))
sns.barplot(x='Country',y='Cost of Living Index',data=top_10_countries)
plt.xticks(rotation=90)#旋转x轴标签
plt.title('Top 10 Countries by Cost of Living Index')
plt.show()
#散点图-生活成本指数与租金指数关系
plt.figure(figsize=(10,6))
sns.scatterplot(x='Cost of Living Index',y='Rent Index',data=df)#添加标题和标签
plt.title('Cost of Living Index vs Rent Index')
plt.show()
#热力图-各个指标之间的相关性
plt.figure(figsize=(10,6))
numeric1_df = df.select_dtypes(include=['float64', 'int64'])
sns.heatmap(numeric1_df.corr(),annot=True,cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
生成图片
单变量分析:

多变量分析:

条形图:

散点图:

热力图:

数据加载与初步检查
  1. 加载数据

    • 使用Pandas加载csv文件。
    • 查看数据的前几行,了解数据结构。
  2. 数据清洗

    • 检查是否有缺失值。
    • 确认所有数值列的数据类型是否正确。
  3. 基本统计信息

    计算每列的基本统计量,如均值、中位数、最小值、最大值等。
探索性数据分析 (EDA)
  1. 单变量分析

    对于每个指标,绘制直方图或箱线图,以了解其分布情况。
  2. 多变量分析

    绘制相关性矩阵,以了解各指标之间的关联程度。
数据可视化
  1. 柱状图:展示排名前10的国家的生活成本指数。
  2. 散点图:生活成本指数与租金指数的关系。
  3. 热力图:各指标之间的相关性。

上部分对数据进行了分析以及可视化

选择不同的目标变量,例如“Cost of Living Index”作为我们要预测的目标。然后,我们可以使用其他相关的指标作为特征来训练模型。例如,考虑使用“Rent Index”,“Groceries Index”,“Restaurant Price Index”,“Local Purchasing Power Index”等作为特征。

下面是一个简单的步骤来构建这样一个模型:

  1. 数据准备:选择特征和目标变量,对数据进行预处理。
  2. 模型选择:选择一个合适的机器学习模型。
  3. 模型训练:使用数据训练模型。
  4. 模型评估:评估模型的性能。

数据准备

首先,需要将数据分为特征(X)和目标变量(y)。在这个例子中,假设我们的目标是预测“Cost of Living Index”。

特征选择

我们可以选择以下几个特征:

  • Rent Index
  • Groceries Index
  • Restaurant Price Index
  • Local Purchasing Power Index

目标变量

使用“Cost of Living Index”作为目标变量。

模型选择

对于这种回归问题,可以尝试使用线性回归模型,因为它是简单且易于理解的。如果线性回归的效果不佳,可以尝试更复杂的模型,比如决策树回归或随机森林回归。

示例代码

Python代码示例:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载数据
data_path = r'D:\机器学习\数据集:国家划分的生活成本\Cost_of_Living_Index_by_Country_2024.csv'
df = pd.read_csv(data_path)

# 特征选择
features = ['Rent Index', 'Groceries Index', 'Restaurant Price Index', 'Local Purchasing Power Index']
X = df[features]
y = df['Cost of Living Index']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建线性回归模型
model = LinearRegression()

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

# 预测
predictions = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, predictions)
r2 = r2_score(y_test, predictions)

print(f'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')

f9ca0c0de0c642a0b52392e5c8091701.png分析结果

在得到模型的结果后,可以查看均方误差(Mean Squared Error, MSE)和决定系数(R^2 Score)来评估模型的好坏。均方误差越低越好,而决定系数接近1则表明模型拟合得很好。

Mean Squared Error: 8.094471876337387
R^2 Score: 0.9737474308220024

可以看出0.97还是非常接近1的

建立简单回归模型的步骤可以总结如下:

  1. 确定变量:首先,需要明确自变量(解释变量)和因变量(响应变量)。例如,在广告费用与销售额的关系中,广告费用是自变量,销售额是因变量。

  2. 数据预处理:在进行建模之前,通常需要对数据进行清洗和准备。这包括处理缺失值、异常值以及确保数据满足线性关系的基本假设。

  3. 绘制散点图:通过绘制散点图来可视化自变量和因变量之间的关系,初步判断它们之间是否存在线性关系。

  4. 建立模型:使用适当的统计软件或编程语言(如R、Python等)中的函数来拟合回归模型。在R中,可以使用lm()函数;在Python中,可以使用sklearn库中的LinearRegression类。

  5. 模型拟合:利用数据拟合回归模型,得到回归系数(β0和β1),其中β0是截距,β1是斜率。

  6. 模型检验:检查模型的显著性和拟合优度,包括R²值、F检验、t检验等统计指标,以评估模型的有效性。

  7. 预测与诊断:使用模型进行预测,并对模型进行诊断,检查残差分布是否符合正态分布,是否存在异方差性等问题。

  8. 模型优化:根据模型诊断结果,可能需要调整模型参数或使用其他技术(如正则化)来改善模型性能。

  9. 结果解释与应用:最后,解释模型参数的含义,并将模型应用于实际问题中进行预测或决策支持。

  • 32
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值