• 机器学习(python)笔记整理


    目录

    一、数据预处理:

    1. 缺失值处理:

    2. 重复值处理:

    3. 数据类型:

    二、特征工程:

    1. 规范化:

    2. 归一化:

    3. 标准化(方差):

    三、训练模型:

    如何计算精确度,召回、F1分数


    一、数据预处理

    思维导图

    1. 缺失值处理

    在数据中存在缺失值的情况下,可以采用删除缺失值、均值填充、中位数填充、插值法等方式进行缺失值处理。

    1. import pandas as pd
    2. import numpy as np
    3. # 创建DataFrame,包含缺失值
    4. df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5], 'B': [6, np.nan, 8, np.nan, 10]})
    5. print(df)
    6. # 删除缺失值
    7. df.dropna(inplace=True)
    8. print(df)
    9. # 均值填充
    10. df.fillna(df.mean(), inplace=True)
    11. print(df)
    12. # 中位数填充
    13. df.fillna(df.median(), inplace=True)
    14. print(df)
    15. # 插值法填充
    16. df.interpolate(inplace=True)
    17. print(df)

    2. 重复值处理:

    在数据中存在重复值的情况下,可以采用删除重复值、保留重复值、统计重复值等方式进行重复值处理。

    1. import pandas as pd
    2. import numpy as np
    3.  
    4. # 创建DataFrame,包含重复值
    5. df = pd.DataFrame({'A': [1, 2, 2, 4, 5], 'B': [6, 6, 8, 8, 10]})
    6. print(df)
    7. # 删除重复值
    8. df.drop_duplicates(inplace=True)
    9. print(df)
    10. # 保留重复值
    11. df[df.duplicated(keep=False)]
    12. print(df)
    13. # 统计重复值
    14. df.duplicated()
    15. print(df.duplicated().sum())

    3. 数据类型

    在数据中存在不同数据类型的情况下,可以采用转换数据类型、或者删除对模型影响不大的数据类型等方式进行数据类型处理。

    1. import pandas as pd
    2.  
    3. # 创建DataFrame,包含不同数据类型
    4. df = pd.DataFrame({'A': [1, 2, 3], 'B': ['4', '5', '6']})
    5. print(df)
    6. # 转换数据类型
    7. df['B'] = df['B'].astype(int)
    8. print(df)
    9. # 删除对模型影响不大的数据类型
    10. df.drop(columns='B', inplace=True)
    11. print(df)

    二、特征工程:

    1. 规范化:

    规范化的目的是将特征的值域缩小到[0,1]之间,以消除各特征值域不同的影响,并提高模型的精度。

    1.one-hot编码

    情况一 . 一个特征中两个不同的特征值(one-hot编码)

    1. import pandas as pd
    2. #情况一 一个特征中两个不同的特征值(one-hot编码)
    3. '''
    4. 1 = male
    5. 0 = female
    6. '''
    7. df1 = pd.DataFrame({'Gender': ['female','male', 'female','female', 'male','male']})
    8. df1['Gender'].replace({'female':1,'male':0})

     情况二 一个特征中有3个不同的特征值(标签编码,一般1对应标签占位)

    1. import pandas as pd
    2. #情况二 一个特征中有多个不同的特征值(标签编码,一般1对应标签占位)
    3. # 创建DataFrame,包含需要规范化的特征
    4. df2 = pd.DataFrame({'A': ['one','one', 'three','twe', 'one','three']})
    5. #使用标签编码来规范化 
    6. '''
    7. 分析有三个不同值(将值1作为特征占位)
    8. one  twe  three
    9. 1     0     0
    10. 0     1     0 
    11. 0     0     1
    12. '''
    13. # 将值替换
    14. df2=df2.replace({'one':'100','twe':'010','three':'001'}).astype('category')
    15. df2

    情况三 个特征中有3个以上不同的特征值(标签法) ---LabelEncoder

    1. from sklearn.preprocessing import LabelEncoder
    2. # 创建一个LabelEncoder对象
    3. le = LabelEncoder()
    4. # 假设有一个分类变量list
    5. categories = ['one', 'twe', 'three', 'four', 'one']
    6. # 使用LabelEncoder进行编码
    7. encoded_categories = le.fit_transform(categories)
    8. # 输出编码结果
    9. print(encoded_categories)

    2. 归一化:

    归一化与规范化类似,也是将特征的值域缩小到[0,1]之间,但与规范化不同的是,归一化是对整个数据集的缩放,而规范化是对单个特征的缩放。示例代码:
     

    1. import pandas as pd
    2.  
    3. # 创建DataFrame,包含需要归一化的特征
    4. df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    5. print(df)
    6.  
    7. #法1 (自定义公式)
    8. # 将值转换为 0-1值,增加相似度
    9. # 公式  :(x-min)/(max-min)
    10. df['A']=(df['A']-df['A'].min())/(df['A'].max()-df['A'].min())
    11. df['B']=(df['B']-df['B'].min())/(df['B'].max()-df['B'].min())
    12. df
    13. #法2(调用函数)
    14. from sklearn.preprocessing import MinMaxScaler
    15. aa=MinMaxScaler()
    16. #归一化
    17. aa.fit_transform(df[['A','B']])

    3. 标准化(方差):

    标准化是将特征值转换为标准正态分布,使得特征值的均值为0,标准差为1,以消除特征值之间的量纲影响,并提高模型的精度。

    数据转化到均值为0,方差为1的范围内,方差和标准差越趋近于0,则表示数据越集中;如果越大,表示数据越离散。

    使用sklearn.preprocession import StandardScaler

    1. import pandas as pd
    2. from sklearn.preprocessing import StandardScaler
    3. # 创建DataFrame,包含需要标准化的特征
    4. df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    5. print(df)
    6.  
    7. # 使用StandardScaler标准化特征
    8. scaler = StandardScaler()
    9. df_norm = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
    10. print(df_norm)

    三、训练模型:

    在对数据进行预处理和特征工程之后,就可以训练模型了。在这里,我们以xgboost模型为例进行训练。

    from xgboost import XGBClassifier,XGBRegressor

     常用模型:XGBClassifier 和 XGBRegressor

    XGBRegressor和XGBClassifier都是XGBoost库中的模型,分别用于回归和分类任务。

    XGBRegressor是用于回归任务的模型,它通过最小化目标函数来学习最佳的模型参数。在训练过程中,XGBRegressor会通过梯度提升方法迭代地优化模型参数,以最小化预测误差。

    XGBClassifier是用于分类任务的模型,它通过最大化目标函数来学习最佳的模型参数。在训练过程中,XGBClassifier会通过梯度提升方法迭代地优化模型参数,以最大化分类准确率。

    因此,XGBRegressor和XGBClassifier的主要区别在于它们的目标函数不同,分别适用于回归和分类任务。

    示例代码:

    1. # 这行代码是从sklearn.model_selection库中导入train_test_split函数,该函数用于将数据集分割为训练集和测试集。
    2. from sklearn.model_selection import train_test_split
    3. # 这行代码将您的主数据集(特征)和目标变量(标签)分割为训练集和测试集。test_size=0.33表示测试集占总数据的33%,random_state=7用于每次分割都产生相同的数据分布,确保结果的可重复性。
    4. X_train, X_test, y_train, y_test = train_test_split(df_train, df_y, test_size=0.33, random_state=7)
    5. # 这行代码从xgboost库中导入XGBClassifier类。这是一个实现了梯度提升决策树算法的分类器。
    6. from xgboost import XGBClassifier
    7. # 创建XGBClassifier的一个实例。这里没有指定任何参数,所以模型会使用默认参数。
    8. model = XGBClassifier()
    9. # eval_set是一个列表,其中包含将用于评估模型性能的测试数据集。这对于早期停止是必要的,以防止过拟合。
    10. eval_set = [(X_test, y_test)]
    11. # 这行代码训练模型。early_stopping_rounds=10表示如果在10轮迭代中,性能没有提升,训练将停止。eval_metric='logloss'设置了评估标准。eval_set是我们之前设置的测试数据,verbose=True表示在训练时显示日志。
    12. model.fit(X_train, y_train, early_stopping_rounds=10, eval_metric='logloss', eval_set=eval_set, verbose=True)
    13. # 使用训练好的模型对测试集进行预测。
    14. y_pred = model.predict(X_test)
    15. # 计算模型的准确度,即预测正确的比例。
    16. # accuracy = accuracy_score(y_test, predictions)
    17. # print(accuracy)
    18. # 从sklearn.metrics导入f1_score函数。
    19. from sklearn.metrics import f1_score
    20. # 计算F1得分,这是准确率和召回率的加权平均值,通常用于评估分类模型的性能,尤其是在不平衡数据集中。
    21. f1 = f1_score(y_test, y_pred)
    22. # 打印F1得分。
    23. print(f1)

     


    如何计算精确度,召回、F1分数

    1. from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score
    2. # 真实标签和模型预测结果
    3. y_true = [0, 1, 1, 0, 1]
    4. y_pred = [0, 1, 0, 0, 1]
    5. # 计算混淆矩阵
    6. conf_matrix = confusion_matrix(y_true, y_pred)
    7. TP, FP, TN, FN = conf_matrix.ravel()
    8. # 计算精确度、召回率和F1分数
    9. precision = precision_score(y_true, y_pred)
    10. recall = recall_score(y_true, y_pred)
    11. f1 = f1_score(y_true, y_pred)
    12. print("Precision:", precision)
    13. print("Recall:", recall)
    14. print("F1 Score:", f1)

  • 相关阅读:
    (看这篇就够了)idea操作git commit后,撤销commit,恢复到提交前的状态
    BLIP2模型加载在不同设备上
    java数组应用(栈和队列以及酒店模拟)
    【计算机组成原理】存储系统(二)—— 半导体随机存储器
    Go Energy 实现的跨平台桌面(GUI)应用介绍
    HBase原理深入
    Ng DevUI 周下载量突破1000啦!
    我的2022面试总结(已拿BAT头条网易滴滴亚马逊offer)
    (附源码)springboot大学生竞赛管理平台 毕业设计
    qt day2
  • 原文地址:https://blog.csdn.net/m0_69097184/article/details/134036827