当前位置: 首页 > news >正文

Python中的机器学习:从入门到实战

在这里插入图片描述

机器学习是人工智能领域的一个重要分支,它通过构建模型来使计算机从数据中学习并做出预测或决策。Python凭借其丰富的库和强大的生态系统,成为了机器学习的首选语言。本文将从基础到实战,详细介绍如何使用Python进行机器学习,涵盖数据预处理、模型训练、模型评估和实际应用等多个方面。

1. 安装必要的库

在开始机器学习之前,需要安装一些常用的库。这些库包括用于数据处理的pandas,用于数值计算的numpy,用于机器学习的scikit-learn,以及用于数据可视化的matplotlibseaborn

pip install pandas numpy scikit-learn matplotlib seaborn
2. 数据预处理

数据预处理是机器学习的重要步骤,包括数据清洗、特征选择、特征缩放等。

导入数据
import pandas as pd# 读取CSV文件
data = pd.read_csv('data.csv')# 查看前5行数据
print(data.head())
处理缺失值
# 检查缺失值
print(data.isnull().sum())# 删除含有缺失值的行
data = data.dropna()# 填充缺失值
data = data.fillna(0)
特征选择
# 选择特征和目标变量
X = data[['feature1', 'feature2', 'feature3']]
y = data['target']
特征缩放
from sklearn.preprocessing import StandardScaler# 创建标准化对象
scaler = StandardScaler()# 拟合和转换特征
X_scaled = scaler.fit_transform(X)
3. 模型训练

选择合适的模型并进行训练是机器学习的核心步骤。scikit-learn提供了多种机器学习算法,包括线性回归、逻辑回归、决策树、随机森林等。

线性回归
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 创建线性回归模型
model = LinearRegression()# 训练模型
model.fit(X_train, y_train)
决策树
from sklearn.tree import DecisionTreeClassifier# 创建决策树模型
model = DecisionTreeClassifier()# 训练模型
model.fit(X_train, y_train)
随机森林
from sklearn.ensemble import RandomForestClassifier# 创建随机森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)# 训练模型
model.fit(X_train, y_train)
4. 模型评估

模型训练完成后,需要对其性能进行评估。常用的评估指标包括准确率、精确率、召回率、F1分数等。

评估回归模型
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"R^2 Score: {r2}")
评估分类模型
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")
5. 模型调优

通过调整模型的超参数,可以进一步提高模型的性能。scikit-learn提供了网格搜索(Grid Search)和随机搜索(Random Search)等方法来进行超参数调优。

网格搜索
from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'n_estimators': [50, 100, 200],'max_depth': [None, 10, 20, 30],'min_samples_split': [2, 5, 10]
}# 创建随机森林模型
model = RandomForestClassifier(random_state=42)# 创建网格搜索对象
grid_search = GridSearchCV(model, param_grid, cv=5, scoring='accuracy')# 执行网格搜索
grid_search.fit(X_train, y_train)# 获取最佳参数和最佳模型
best_params = grid_search.best_params_
best_model = grid_search.best_estimator_print(f"Best Parameters: {best_params}")
随机搜索
from sklearn.model_selection import RandomizedSearchCV# 定义参数分布
param_dist = {'n_estimators': [50, 100, 200],'max_depth': [None, 10, 20, 30],'min_samples_split': [2, 5, 10]
}# 创建随机森林模型
model = RandomForestClassifier(random_state=42)# 创建随机搜索对象
random_search = RandomizedSearchCV(model, param_distributions=param_dist, n_iter=10, cv=5, scoring='accuracy', random_state=42)# 执行随机搜索
random_search.fit(X_train, y_train)# 获取最佳参数和最佳模型
best_params = random_search.best_params_
best_model = random_search.best_estimator_print(f"Best Parameters: {best_params}")
6. 实际应用

机器学习在实际应用中有着广泛的应用场景,如客户细分、推荐系统、欺诈检测等。

客户细分
from sklearn.cluster import KMeans# 选择特征
X = data[['feature1', 'feature2', 'feature3']]# 创建KMeans模型
kmeans = KMeans(n_clusters=3, random_state=42)# 训练模型
kmeans.fit(X)# 获取聚类标签
labels = kmeans.labels_# 添加聚类标签到数据集中
data['cluster'] = labels# 查看每个聚类的特征分布
print(data.groupby('cluster').mean())
推荐系统
from sklearn.metrics.pairwise import cosine_similarity# 选择用户-物品评分矩阵
ratings = data.pivot(index='user_id', columns='item_id', values='rating')# 计算相似度矩阵
similarity_matrix = cosine_similarity(ratings.fillna(0))# 获取用户1的相似用户
user_similarities = similarity_matrix[0]# 推荐物品
recommendations = ratings.iloc[user_similarities.argsort()[::-1][:10]].mean(axis=0).sort_values(ascending=False)print(recommendations)
欺诈检测
from sklearn.ensemble import IsolationForest# 选择特征
X = data[['feature1', 'feature2', 'feature3']]# 创建Isolation Forest模型
model = IsolationForest(contamination=0.05, random_state=42)# 训练模型
model.fit(X)# 预测异常值
anomalies = model.predict(X)# 添加异常标签到数据集中
data['anomaly'] = anomalies# 查看异常数据
print(data[data['anomaly'] == -1])
结语

Python在机器学习领域具有强大的生态系统,通过使用pandasnumpyscikit-learn等库,可以轻松实现从数据预处理到模型训练、模型评估和实际应用的全流程。希望本文能帮助你更好地理解和应用Python进行机器学习,提升你的数据分析和建模能力。

相关文章:

  • 景联文科技精准数据标注:优化智能标注平台,打造智能未来
  • 神经网络(二):卷积神经网络
  • javaweb之会话管理
  • 睡眠:生命的隐形守护者
  • 【Linux】防火墙
  • 前段辅助工具分享(像素大厨)
  • 网络编程操作—函数
  • Comfyui 学习笔记2
  • react:React Hook函数
  • 【iOS】计算器的仿写
  • 秦巴山区SHP格式矢量范围
  • OpenCV视频I/O(4)视频采集类VideoCapture之获取异常处理模式函数getExceptionMode()的使用
  • PHP的guzzlehttp/guzzle库在碰到各种异常时的场景
  • 【rust】 基于rust编写wasm,实现markdown转换为html文本
  • 智驭未来·电网负荷智控系统
  • 【剑指offer】让抽象问题具体化
  • CSS 提示工具(Tooltip)
  • Docker下部署自己的LNMP工作环境
  • javascript从右向左截取指定位数字符的3种方法
  • JAVA并发编程--1.基础概念
  • mysql innodb 索引使用指南
  • vue:响应原理
  • Xmanager 远程桌面 CentOS 7
  • 基于webpack 的 vue 多页架构
  • 简单实现一个textarea自适应高度
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 一道闭包题引发的思考
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Redis 实现计数器和限速器的
  • #pragam once 和 #ifndef 预编译头
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (办公)springboot配置aop处理请求.
  • (二) 初入MySQL 【数据库管理】
  • (七)理解angular中的module和injector,即依赖注入
  • (十八)三元表达式和列表解析
  • (十六)串口UART
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET Core 中的路径问题
  • .Net IOC框架入门之一 Unity
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net下的富文本编辑器FCKeditor的配置方法
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • .考试倒计时43天!来提分啦!
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [Algorithm][综合训练][kotori和气球][体操队形][二叉树中的最大路径和]详细讲解
  • [Android]使用Android打包Unity工程
  • [Android]一个简单使用Handler做Timer的例子
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]