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

机器学习——基本算法

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.lryc.cn/news/609906.html

相关文章:

  • 理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
  • 北斗变形监测技术在基础设施安全中的应用
  • Android JUnit 测试框架详解:从基础到高级实践
  • 2.1 DICOM标准结构与组成
  • Swin-Transformer从浅入深详解
  • 【0基础PS】PS工具详解--钢笔工具
  • 【高等数学】第八章 向量代数与空间解析几何——第一节 向量及其线性运算
  • 三轴云台之增稳技术篇
  • VGMP(VRRP Group Management Protocol)VRRP组管理协议
  • 权限管理命令
  • 【Unity3D】Ctrl+Shift+P暂停快捷键(Unity键盘快捷键)用不了问题快捷键无法使用问题
  • 大型软件系统的主要指标是什么?
  • 抛出自定义异常
  • Linux 进程基础(三):进程是什么、进程的创建与查看
  • 文本转语音(TTS)脚本
  • 基于TurboID的邻近标记质谱(PL-MS)实验指南:从质粒构建到质谱鉴定
  • 【嵌入式电机控制#24】BLDC:霍尔测速(高难度,重理解)
  • 聊聊IT行业初创团队质量管理前期准备
  • 十二、请求响应-请求:数组参数和集合参数
  • 编码器-解码器架构:从原理到实践
  • 压缩与归档命令
  • Linux 逻辑卷管理
  • Javascript面试题及详细答案150道之(046-060)
  • Redis之Hash和List类型常用命令
  • Dubbo 3.x源码(32)—Dubbo Provider处理服务调用请求源码
  • 《算法导论》第 1 章 - 算法在计算中的作用
  • Java开发时出现的问题---语言特性与基础机制陷阱
  • 从HTTP到WebSocket:打造极速实时通讯体验
  • 安全扫描:目标主机支持RSA密钥交换问题
  • 国产化低代码平台如何筑牢企业数字化安全底座