9.3 Pandas 与 Scikit-learn


文档摘要

9.3 Pandas 与 Scikit-learn 9.3 Pandas 与 Scikit-learn Pandas和Scikit-learn是Python数据科学领域中最常用的两个库。Pandas提供了灵活高效的数据结构,特别是DataFrame和Series,用于数据清洗、转换和分析。Scikit-learn则提供了丰富的机器学习算法,用于模型训练、预测和评估。两者之间的无缝集成极大地简化了数据科学工作流程。 9.3.1 集成优势 数据预处理: Pandas DataFrame可以轻松地加载、清洗和转换数据,然后直接传递给Scikit-learn的算法。 特征工程: Pandas提供了强大的工具,可以创建新的特征,进行特征选择和降维,从而提高模型性能。

9.3 Pandas 与 Scikit-learn

9.3 Pandas 与 Scikit-learn

Pandas和Scikit-learn是Python数据科学领域中最常用的两个库。Pandas提供了灵活高效的数据结构,特别是DataFrame和Series,用于数据清洗、转换和分析。Scikit-learn则提供了丰富的机器学习算法,用于模型训练、预测和评估。两者之间的无缝集成极大地简化了数据科学工作流程。

9.3.1 集成优势

  • 数据预处理: Pandas DataFrame可以轻松地加载、清洗和转换数据,然后直接传递给Scikit-learn的算法。

  • 特征工程: Pandas提供了强大的工具,可以创建新的特征,进行特征选择和降维,从而提高模型性能。

  • 模型评估: Pandas DataFrame可以用于存储和分析模型预测结果,方便进行模型评估和可视化。

  • 管道化: Scikit-learn的Pipeline可以将Pandas数据预处理步骤和机器学习模型组合成一个单一的工作流程。

9.3.2 数据格式兼容性

Scikit-learn的算法通常接受NumPy数组作为输入。Pandas DataFrame和Series可以轻松地转换为NumPy数组:

  • DataFrame.values:将DataFrame转换为NumPy数组。

  • Series.values:将Series转换为NumPy数组。

Scikit-learn也可以直接处理Pandas DataFrame和Series,无需显式转换。这使得代码更加简洁易读。

9.3.3 代码实践

下面通过几个示例来演示Pandas和Scikit-learn的集成应用。

示例1:使用Pandas加载数据并训练线性回归模型

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 # 1. 加载数据 data = pd.read_csv('data.csv') # 假设data.csv包含特征和目标变量 # 2. 数据预处理 (这里假设数据已经清洗干净,没有缺失值) X = data[['feature1', 'feature2', 'feature3']] # 选择特征列 y = data['target'] # 选择目标变量 # 3. 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 4. 创建线性回归模型 model = LinearRegression() # 5. 训练模型 model.fit(X_train, y_train) # 6. 预测 y_pred = model.predict(X_test) # 7. 评估模型 mse = mean_squared_error(y_test, y_pred) print(f'Mean Squared Error: {mse}') # 8. 将预测结果添加到DataFrame中 results = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred}) print(results.head())

代码详解:

  1. 加载数据: 使用pd.read_csv()函数从CSV文件中加载数据到Pandas DataFrame中。

  2. 数据预处理: 从DataFrame中选择特征列(X)和目标变量列(y)。 这里假设数据是已经处理好的,实际情况可能需要处理缺失值、异常值等。

  3. 划分数据集: 使用train_test_split()函数将数据集划分为训练集和测试集。

  4. 创建模型: 创建一个线性回归模型LinearRegression()

  5. 训练模型: 使用训练数据X_trainy_train训练模型。

  6. 预测: 使用训练好的模型对测试数据X_test进行预测。

  7. 评估模型: 使用均方误差mean_squared_error()评估模型的性能。

  8. 结果分析: 创建一个新的DataFrame,将实际值和预测值进行对比,方便分析模型的预测效果。

示例2:使用Pipeline进行数据预处理和模型训练

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline from sklearn.metrics import accuracy_score # 1. 加载数据 data = pd.read_csv('data.csv') # 假设data.csv包含数值型和类别型特征 # 2. 定义数值型和类别型特征 numerical_features = ['feature1', 'feature2'] categorical_features = ['feature3'] # 3. 创建预处理器 numeric_transformer = StandardScaler() # 数值型特征标准化 categorical_transformer = OneHotEncoder(handle_unknown='ignore') # 类别型特征独热编码 # 4. 创建ColumnTransformer preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numerical_features), ('cat', categorical_transformer, categorical_features)]) # 5. 创建Pipeline model = Pipeline(steps=[('preprocessor', preprocessor), ('classifier', LogisticRegression(solver='liblinear'))]) # 6. 划分训练集和测试集 X = data.drop('target', axis=1) y = data['target'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 7. 训练模型 model.fit(X_train, y_train) # 8. 预测 y_pred = model.predict(X_test) # 9. 评估模型 accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy}')

代码详解:

  1. 加载数据: 使用pd.read_csv()函数从CSV文件中加载数据到Pandas DataFrame中。

  2. 定义特征类型: 定义数值型和类别型特征的列表。

  3. 创建预处理器: 创建数值型特征的标准化器StandardScaler()和类别型特征的独热编码器OneHotEncoder()handle_unknown='ignore' 参数用于处理测试集中可能出现但在训练集中未出现的类别。

  4. 创建ColumnTransformer: 使用ColumnTransformer()将不同的预处理器应用于不同的特征列。

  5. 创建Pipeline: 使用Pipeline()将预处理器和分类器组合成一个单一的工作流程。 steps参数是一个列表,其中每个元素是一个元组,包含步骤的名称和预处理器/模型。

  6. 划分数据集: 使用train_test_split()函数将数据集划分为训练集和测试集。

  7. 训练模型: 使用训练数据X_trainy_train训练Pipeline。 Pipeline会自动应用预处理步骤,然后训练模型。

  8. 预测: 使用训练好的Pipeline对测试数据X_test进行预测。

  9. 评估模型: 使用准确率accuracy_score()评估模型的性能。

示例3:使用Pandas进行特征工程

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score # 1. 加载数据 data = pd.read_csv('data.csv') # 2. 特征工程 # 例如,创建一个新的特征,将两个现有特征相乘 data['feature4'] = data['feature1'] * data['feature2'] # 例如,创建一个新的类别特征,基于现有数值特征的范围 data['feature5'] = pd.cut(data['feature1'], bins=[0, 10, 20, 30], labels=['low', 'medium', 'high']) # 3. 处理类别特征 data = pd.get_dummies(data, columns=['feature5'], drop_first=True) #独热编码 # 4. 划分训练集和测试集 X = data.drop('target', axis=1) y = data['target'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 5. 创建随机森林模型 model = RandomForestClassifier(random_state=42) # 6. 训练模型 model.fit(X_train, y_train) # 7. 预测 y_pred = model.predict(X_test) # 8. 评估模型 accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy}')

代码详解:

  1. 加载数据: 使用pd.read_csv()函数从CSV文件中加载数据到Pandas DataFrame中。

  2. 特征工程:

    • 创建一个新的特征feature4,将现有特征feature1feature2相乘。

    • 创建一个新的类别特征feature5,基于现有数值特征feature1的范围。 pd.cut()函数用于将数值数据划分为离散的区间。

  3. 处理类别特征: 使用pd.get_dummies()函数对类别特征feature5进行独热编码。 drop_first=True参数可以避免多重共线性。

  4. 划分数据集: 使用train_test_split()函数将数据集划分为训练集和测试集。

  5. 创建模型: 创建一个随机森林模型RandomForestClassifier()

  6. 训练模型: 使用训练数据X_trainy_train训练模型。

  7. 预测: 使用训练好的模型对测试数据X_test进行预测。

  8. 评估模型: 使用准确率accuracy_score()评估模型的性能。

9.3.4 Mermaid 图

以下是一个使用Pipeline进行数据预处理和模型训练的流程图:

图解:

  1. Load Data (Pandas DataFrame): 使用Pandas加载数据到DataFrame中。

  2. Data Preprocessing: 数据预处理阶段,包括特征缩放、编码等。

  3. ColumnTransformer: 使用ColumnTransformer将不同的预处理器应用于不同的特征列。

  4. Numerical Features (StandardScaler): 对数值型特征进行标准化。

  5. Categorical Features (OneHotEncoder): 对类别型特征进行独热编码。

  6. Transformed Numerical Features: 标准化后的数值型特征。

  7. Transformed Categorical Features: 独热编码后的类别型特征。

  8. Concatenate Features: 将处理后的数值型和类别型特征连接起来。

  9. Logistic Regression Model: 使用逻辑回归模型进行分类。

  10. Model Training: 使用训练数据训练模型。

  11. Prediction: 使用训练好的模型进行预测。

  12. Model Evaluation: 评估模型的性能。

9.3.5 总结

Pandas和Scikit-learn的集成是Python数据科学工作流程中的关键组成部分。Pandas提供了灵活的数据结构和数据处理工具,而Scikit-learn提供了丰富的机器学习算法。通过将两者结合使用,可以高效地完成数据预处理、特征工程、模型训练和评估等任务。Pipeline的使用可以进一步简化工作流程,提高代码的可读性和可维护性。掌握Pandas和Scikit-learn的集成应用,对于数据科学家来说至关重要。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U