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

机器学习——基本算法

sklearn

整体工作流程
1.特征筛选 → 2. 清理缺失值 → 3. 分类数据数字化

特征选择原因:
移除无关特征(如日期、ID等)
聚焦于可能影响南瓜价格的关键属性
减少数据维度,提高后续分析效率

处理缺失值原因:
机器学习模型不能处理NaN
确保所有样本完整可用
避免因缺失数据导致的分析偏差

标签编码原因:
机器学习算法只能处理数值数据
将分类变量转换为模型可理解的格式
为后续建模(如分类、聚类)做准备

将所有字符串数据转换为数字。
如果你现在查看 new_pumpkins dataframe,你会看到所有字符串

from sklearn.preprocessing import LabelEncodernew_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform)

创建新集合并打印

new_columns = ['Package', 'Price']
lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns')lin_pumpkins

将分类变量转换为数值
LabelEncoder():创建标签编码器对象
.fit_transform():对每列独立进行
学习该列的唯一类别,将类别映射为整数(0,1,2,…)
apply():将编码器应用到数据框的每一列

new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform)

尝试在数据的两点之间找到良好的相关性

print(new_pumpkins['City'].corr(new_pumpkins['Price']))
0.32363971816089226

删除任何空数据,包含缺失值(NaN)
inplace=True:直接在原数据上修改,不创建新副本

new_pumpkins.dropna(inplace=True)

“曲线下面积”(AUC)

auc = roc_auc_score(y_test,y_scores[:,1])
print(auc)

线性回归

from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)pred = lin_reg.predict(X_test)accuracy_score = lin_reg.score(X_train,y_train)
print('Model Accuracy: ', accuracy_score)

非线性回归

初次尝试

# 原始数据
X = [[50], [60], [70], [80], [90], [100]]  # 房屋面积(m²)
y = [150, 180, 200, 210, 215, 218]         # 价格(万元)# 应用二阶多项式回归
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)# 训练模型
model = LinearRegression()
model.fit(X_poly, y)# 预测120m²房屋价格
new_house = poly.transform([[120]])
predicted_price = model.predict(new_house)
print(f"预测价格: {predicted_price[0]:.2f}万元")

交叉验证选择最佳阶数

from sklearn.model_selection import cross_val_scorescores = []
degrees = range(1, 6)for d in degrees:poly = PolynomialFeatures(degree=d)X_poly = poly.fit_transform(X)model = LinearRegression()# 使用5折交叉验证score = cross_val_score(model, X_poly, y, cv=5).mean()scores.append(score)# 选择最佳阶数
best_degree = degrees[np.argmax(scores)]
print(f"最佳多项式阶数: {best_degree}")

进阶技巧

  1. 正则化:添加L1/L2正则化防止过拟合
from sklearn.linear_model import Ridge
model = Ridge(alpha=0.5)  # L2正则化
  1. 特征缩放:多项式特征前先标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
  1. 管道(Pipeline)简化流程
from sklearn.pipeline import make_pipelinemodel = make_pipeline(PolynomialFeatures(degree=2),StandardScaler(),LinearRegression()
)
model.fit(X, y)

逻辑回归——二元分类

pandas

  1. 使用 pandas中的 head() 函数查看前五行。
import pandas as pd
pumpkins = pd.read_csv('../data/US-pumpkins.csv')
pumpkins.head()

在这里插入图片描述

  1. 检查当前 dataframe 中是否缺少数据
pumpkins.isnull().sum()

在这里插入图片描述

  1. 使用 drop() 删除它的几个列,只保留你需要的列:
new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)

计算平均值,并更新

price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
month = pd.DatetimeIndex(pumpkins['Date']).monthnew_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})

筛选过滤

pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]

在这里插入图片描述

matplotlib

单元格图像绘制

price = new_pumpkins.Price
month = new_pumpkins.Monthplt.scatter(price, month)
plt.show()

柱状图

new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')plt.ylabel("Pumpkin Price")

在这里插入图片描述
线性回归

plt.scatter(X_test, y_test,  color='black')
plt.plot(X_test, pred, color='blue', linewidth=3)plt.xlabel('Package')
plt.ylabel('Price')plt.show()

热力图

corr = poly_pumpkins.corr()
corr.style.background_gradient(cmap='coolwarm')

在这里插入图片描述
并列网格,观察两个变量之间的关系
通过并列观察数据,你可以看到颜色数据与其他列的关系。

import seaborn as snsg = sns.PairGrid(new_pumpkins)
g.map(sns.scatterplot)

请添加图片描述
分类散点图
显示值的分布

sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins)

在这里插入图片描述
小提琴图
显示值的分布,适用于大的数据集

sns.catplot(x="Color", y="Item Size",kind="violin", data=new_pumpkins)

ROC 曲线
ROC 曲线通常具有 Y 轴上的真阳性率和 X 轴上的假阳性率。
曲线的陡度以及中点线
与曲线之间的空间很重要:你需要一条快速向上并越过直线的曲线。
请添加图片描述

http://www.xdnf.cn/news/17196.html

相关文章:

  • 笛卡尔坐标
  • Java 中 BigDecimal、Float、Double 的取整与保留小数处理方法详解
  • 简要探讨大型语言模型(LLMs)的发展历史
  • Android进程基础:Zygote
  • Linux 磁盘管理与分区配置
  • 【2025WACV-最佳论文】RayGauss:基于体积高斯的光线投射,用于逼真的小说视图合成
  • (JAVA)自建应用调用企业微信API接口,设置企业可信IP
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第五天(jQuery函数库)
  • 使用1panel将http升级至https的过程
  • 板子指示灯状态设计
  • ESDocValues机制
  • Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统
  • python与C++
  • web第一次作业
  • Spring Cloud Gateway 实现登录校验:构建统一认证入口
  • Kali基础知识点【2】
  • Linux 网络深度剖析:传输层协议 UDP/TCP 原理详解
  • 小实验:按键点灯(中断法)
  • 如何安装 nvm-setup.exe?Windows 安装 NVM 管理 Node.js 版本的完整流程(附安装包下载)
  • C# 类型
  • Git基础操作教程
  • Dbeaver数据库的安装和使用(保姆级别)
  • 计算机网络:理解路由的下一跳
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现路口车辆速度的追踪识别(C#代码UI界面版)
  • 【保姆级 - 大模型应用开发】DeepSeek + Faiss + langchain 搭建本地知识库 检索 | 代码实战
  • 行业报告:.games域名正引领游戏娱乐产业营销新风向
  • Ubuntu 下 MySQL 运维自动化部署教程(在线简易版)
  • 【测试】⾃动化测试常⽤函数
  • Linux命令top
  • Selenium教程(Python 网页自动化测试脚本)