机器学习(python)笔记整理

目录

一、数据预处理:

[1. 缺失值处理:](#1. 缺失值处理:)

[2. 重复值处理:](#2. 重复值处理:)

[3. 数据类型:](#3. 数据类型:)

二、特征工程:

[1. 规范化:](#1. 规范化:)

[2. 归一化:](#2. 归一化:)

[3. 标准化(方差):](#3. 标准化(方差):)

三、训练模型:

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


一、数据预处理:

1. 缺失值处理:

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

python 复制代码
import pandas as pd
import numpy as np

# 创建DataFrame,包含缺失值
df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5], 'B': [6, np.nan, 8, np.nan, 10]})
print(df)

# 删除缺失值
df.dropna(inplace=True)
print(df)

# 均值填充
df.fillna(df.mean(), inplace=True)
print(df)

# 中位数填充
df.fillna(df.median(), inplace=True)
print(df)

# 插值法填充
df.interpolate(inplace=True)
print(df)

2. 重复值处理:

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

python 复制代码
import pandas as pd
import numpy as np
 
# 创建DataFrame,包含重复值
df = pd.DataFrame({'A': [1, 2, 2, 4, 5], 'B': [6, 6, 8, 8, 10]})
print(df)

# 删除重复值
df.drop_duplicates(inplace=True)
print(df)

# 保留重复值
df[df.duplicated(keep=False)]
print(df)

# 统计重复值
df.duplicated()
print(df.duplicated().sum())

3. 数据类型:

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

python 复制代码
import pandas as pd
 
# 创建DataFrame,包含不同数据类型
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['4', '5', '6']})
print(df)

# 转换数据类型
df['B'] = df['B'].astype(int)
print(df)

# 删除对模型影响不大的数据类型
df.drop(columns='B', inplace=True)
print(df)

二、特征工程:

1. 规范化:

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

1.one-hot编码

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

python 复制代码
import pandas as pd
#情况一  一个特征中两个不同的特征值(one-hot编码)
'''
1 = male
0 = female
'''
df1 = pd.DataFrame({'Gender': ['female','male', 'female','female', 'male','male']})
df1['Gender'].replace({'female':1,'male':0})

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

python 复制代码
import pandas as pd

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

# 创建DataFrame,包含需要规范化的特征
df2 = pd.DataFrame({'A': ['one','one', 'three','twe', 'one','three']})


#使用标签编码来规范化 
'''
分析有三个不同值(将值1作为特征占位)
one  twe  three
1     0     0
0     1     0 
0     0     1
'''
# 将值替换
df2=df2.replace({'one':'100','twe':'010','three':'001'}).astype('category')

df2

2. 归一化:

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

python 复制代码
import pandas as pd
 
# 创建DataFrame,包含需要归一化的特征
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print(df)
 

# 将值转换为 0-1值,增加相似度
# 公式  :(x-min)/(max-min)

df['A']=(df['A']-df['A'].min())/(df['A'].max()-df['A'].min())
df['B']=(df['B']-df['B'].min())/(df['B'].max()-df['B'].min())
df

3. 标准化(方差):

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

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

使用sklearn.preprocession import StandardScaler

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

三、训练模型:

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

示例代码:

python 复制代码
# 这行代码是从sklearn.model_selection库中导入train_test_split函数,该函数用于将数据集分割为训练集和测试集。
from sklearn.model_selection import train_test_split

# 这行代码将您的主数据集(特征)和目标变量(标签)分割为训练集和测试集。test_size=0.33表示测试集占总数据的33%,random_state=7用于每次分割都产生相同的数据分布,确保结果的可重复性。
X_train, X_test, y_train, y_test = train_test_split(df_train, df_y, test_size=0.33, random_state=7)

# 这行代码从xgboost库中导入XGBClassifier类。这是一个实现了梯度提升决策树算法的分类器。
from xgboost import XGBClassifier

# 创建XGBClassifier的一个实例。这里没有指定任何参数,所以模型会使用默认参数。
model = XGBClassifier()

# eval_set是一个列表,其中包含将用于评估模型性能的测试数据集。这对于早期停止是必要的,以防止过拟合。
eval_set = [(X_test, y_test)]

# 这行代码训练模型。early_stopping_rounds=10表示如果在10轮迭代中,性能没有提升,训练将停止。eval_metric='logloss'设置了评估标准。eval_set是我们之前设置的测试数据,verbose=True表示在训练时显示日志。
model.fit(X_train, y_train, early_stopping_rounds=10, eval_metric='logloss', eval_set=eval_set, verbose=True)

# 使用训练好的模型对测试集进行预测。
y_pred = model.predict(X_test)

# (这行代码被注释掉了,如果使用,它将执行以下操作)这行代码通过四舍五入预测值(因为梯度提升生成的是概率)来创建一个新的预测列表。
# predictions = [round(value) for value in y_pred]

# (以下两行代码被注释掉了,如果使用,它们将执行以下操作)计算模型的准确度,即预测正确的比例。
# accuracy = accuracy_score(y_test, predictions)
# print(accuracy)

# 从sklearn.metrics导入f1_score函数。
from sklearn.metrics import f1_score

# 计算F1得分,这是准确率和召回率的加权平均值,通常用于评估分类模型的性能,尤其是在不平衡数据集中。
f1 = f1_score(y_test, y_pred)

# 打印F1得分。
print(f1)

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

python 复制代码
from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score

# 真实标签和模型预测结果
y_true = [0, 1, 1, 0, 1]
y_pred = [0, 1, 0, 0, 1]

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_true, y_pred)
TP, FP, TN, FN = conf_matrix.ravel()

# 计算精确度、召回率和F1分数
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
相关推荐
Red Red26 分钟前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
贰十六1 小时前
笔记:Centos Nginx Jdk Mysql OpenOffce KkFile Minio安装部署
笔记·nginx·centos
知兀1 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
醉陌离2 小时前
渗透测试笔记——shodan(4)
笔记
LateBloomer7773 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz3 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py3 小时前
【Linux】-学习笔记04
linux·笔记·学习
fengbizhe4 小时前
笔试-笔记2
c++·笔记
余为民同志4 小时前
mini-lsm通关笔记Week2Day4
笔记
墨染风华不染尘4 小时前
python之开发笔记
开发语言·笔记·python