机器学习速成第二集——监督学习之回归+数据处理(实践部分)!
例如,考虑使用“Rent Index”,“Groceries Index”,“Restaurant Price Index”,“Local Purchasing Power Index”等作为特征。例如,这下面是我从Kaggle网站下载一个数据集,对其进行预处理、特征工程、EDA,并最终训练一个简单的机器学习模型。:检查模型的显著性和拟合优度,包括R²值、F检验、t检验等统计指标,以评估模型的有效
目录
数据预处理
数据预处理是机器学习流程中非常重要的一步,它包括数据清洗、特征工程等步骤。
数据清洗
-
处理缺失值:
# 使用中位数填充缺失值 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,并最终训练一个简单的机器学习模型。
项目步骤
- 数据加载:使用Pandas加载数据。
- 数据清洗:处理缺失值、异常值。
- 特征工程:创建新特征、进行特征缩放。
- EDA:使用Matplotlib进行可视化。
- 模型训练:使用Scikit-Learn训练模型。
- 模型评估:使用适当的指标评估模型性能。
代码实操示例
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()
生成图片
单变量分析:
多变量分析:
条形图:
散点图:
热力图:
数据加载与初步检查
加载数据:
- 使用Pandas加载csv文件。
- 查看数据的前几行,了解数据结构。
数据清洗:
- 检查是否有缺失值。
- 确认所有数值列的数据类型是否正确。
基本统计信息:
计算每列的基本统计量,如均值、中位数、最小值、最大值等。
探索性数据分析 (EDA)
单变量分析:
对于每个指标,绘制直方图或箱线图,以了解其分布情况。多变量分析:
绘制相关性矩阵,以了解各指标之间的关联程度。
数据可视化
- 柱状图:展示排名前10的国家的生活成本指数。
- 散点图:生活成本指数与租金指数的关系。
- 热力图:各指标之间的相关性。
上部分对数据进行了分析以及可视化
选择不同的目标变量,例如“Cost of Living Index”作为我们要预测的目标。然后,我们可以使用其他相关的指标作为特征来训练模型。例如,考虑使用“Rent Index”,“Groceries Index”,“Restaurant Price Index”,“Local Purchasing Power Index”等作为特征。
下面是一个简单的步骤来构建这样一个模型:
- 数据准备:选择特征和目标变量,对数据进行预处理。
- 模型选择:选择一个合适的机器学习模型。
- 模型训练:使用数据训练模型。
- 模型评估:评估模型的性能。
数据准备
首先,需要将数据分为特征(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}')
分析结果
在得到模型的结果后,可以查看均方误差(Mean Squared Error, MSE)和决定系数(R^2 Score)来评估模型的好坏。均方误差越低越好,而决定系数接近1则表明模型拟合得很好。
Mean Squared Error: 8.094471876337387
R^2 Score: 0.9737474308220024可以看出0.97还是非常接近1的
建立简单回归模型的步骤可以总结如下:
确定变量:首先,需要明确自变量(解释变量)和因变量(响应变量)。例如,在广告费用与销售额的关系中,广告费用是自变量,销售额是因变量。
数据预处理:在进行建模之前,通常需要对数据进行清洗和准备。这包括处理缺失值、异常值以及确保数据满足线性关系的基本假设。
绘制散点图:通过绘制散点图来可视化自变量和因变量之间的关系,初步判断它们之间是否存在线性关系。
建立模型:使用适当的统计软件或编程语言(如R、Python等)中的函数来拟合回归模型。在R中,可以使用
lm()
函数;在Python中,可以使用sklearn
库中的LinearRegression
类。模型拟合:利用数据拟合回归模型,得到回归系数(β0和β1),其中β0是截距,β1是斜率。
模型检验:检查模型的显著性和拟合优度,包括R²值、F检验、t检验等统计指标,以评估模型的有效性。
预测与诊断:使用模型进行预测,并对模型进行诊断,检查残差分布是否符合正态分布,是否存在异方差性等问题。
模型优化:根据模型诊断结果,可能需要调整模型参数或使用其他技术(如正则化)来改善模型性能。
结果解释与应用:最后,解释模型参数的含义,并将模型应用于实际问题中进行预测或决策支持。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)