机器学习 特征工程及模型聚合

news2024/11/24 14:26:48

目录

一:什么是特征工程

二:特征工程方法

三:独热编码

四:归一化处理

五:特征工程方法

六:特征工程处理过程

七:Kaggle房价预测实际案例


一:什么是特征工程

1 是最大限度地从原始数据中提取特征以供算法和模型的使用

2 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限

二:特征工程方法

数据预处理的方式

1 缺失值处理(均值、众数、中位数)

2 字符编码数据处理-亚编码(独热编码)

3 归一化处理

大致过程

数据集准备

数据处理

观察数据是否有特点

数据预处理

构建出数据主要特征

从多列数据中提取出关键的特征

三:独热编码

示例如下

是否有朋友has_friend_hashas_friend_no
10
没有01

四:归一化处理

简单示例如下,分析问题,天气+价格是特征数据

天气10价格
550
3150
10300
5140
530

那么问题如下,天气多云,价格80,是否要出去呢(结果即标签数据)?

多云80

4-1 最值归一化 normalization

最值归一化:把所有数据映射到0-1之间,如下

适用于分布有明显边界的情况:受outlier影响较大

4-2 均值方差归一化 standardization

数据分布没有明显的边界;有可能存在极端数据值

均值方差归一化:把所有的数据归一到均值为0 方差为1的分布中

x特征

x-mean特征均值

S方差 

五:特征工程方法

特征选择

  1 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本没有差异,这个特征对于样本的区分并没有什么用

  2 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优先选择

方差过滤

相关系数  

特征降维(特征矩阵过大,导致训练时间太长)

  1 主成分分析法PCA,PCA是一种无监督的降维方法

  2 现象判别分析法LDA、LDA是一种有监督的降维方法 

六:特征工程处理过程

1 空值处理 【数值型(均值、中位数、众数),字符型(众数)】

缺失值超1/3就剔除

2 字符型数据处理--独热编码 将字符型数据转换为数值型数据

3 方差过滤--独热编码形成了非常多新的特征,过滤掉一些列中的数据差别不大的列   <0.1列舍弃

4 相关系数计算(皮尔逊相关系数)  提取主要特征

5 特征构建--查看特征之间的相关系数  若>0.8则剔除其中那一列

6 数据集划分

7 网格模型 超参调优

8 保存模型 预测与实际比对

七:Kaggle房价预测实际案例

from sklearn.impute import SimpleImputer  # 众数
from sklearn.preprocessing import OneHotEncoder  # 独热编码
from sklearn.feature_selection import VarianceThreshold  # 方差过滤
from scipy.stats import pearsonr  # 皮尔逊相关系数
import pandas as pd
import numpy as np

# 设置显示所有行、列
pd.set_option("display.max_rows", None)
pd.set_option("display.max_columns", None)
data_df = pd.read_csv("train.csv", sep=',')
# print(data_df.head(), data_df.shape)  # 1460*80

# 空值处理
# print(data_df.isnull().sum())
# 超过1/3列的剔除
data_df.drop(columns=['Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature'],
             axis=1, inplace=True)
# print(data_df.shape)

# 2 空值填充
# 2-1 [数字列]填充
data_df['LotFrontage'].fillna(data_df['LotFrontage'].mean(), inplace=True)
data_df['GarageYrBlt'].fillna(data_df['GarageYrBlt'].median(), inplace=True)
data_df['MasVnrArea'].fillna(data_df['MasVnrArea'].median(), inplace=True)
# print(data_df.isnull().sum())

# 2-2 剩余的[字符列]在miss_col_list中
# 获取缺失列的名字
miss_col_list = data_df.isnull().any()[data_df.isnull().any().values == True].index.tolist()
# print(data_df.isnull().any())
# print(miss_col_list)

# 获取缺失列对应的列值--list
miss_list = []

for i in miss_col_list:
    miss_list.append(data_df[i].values.reshape(-1, 1))  # 任意行 列数为1
# print(miss_list)

# 对每一列进行众数填充
for i in range(0, len(miss_list)):
    im_most = SimpleImputer(strategy='most_frequent')
    most = im_most.fit_transform(miss_list[i])
    data_df.loc[:, miss_col_list[i]] = most

# print(data_df.isnull().sum())

# 目标找到所有的字符列
ob_feature = data_df.select_dtypes(include=['object']).columns.tolist()
# print(ob_feature, len(ob_feature))
ob_df_data = data_df.loc[:, ob_feature]
# print(ob_df_data.head())

# 实例化独热编码对象
OneHot = OneHotEncoder()
# numpy ndarray
result = OneHot.fit_transform(ob_df_data).toarray()
# 获取列名
OneHotNames = OneHot.get_feature_names().tolist()
# print(OneHotNames, len(OneHotNames))

# 独热编码过后的dataframe
OneHot_df = pd.DataFrame(result, columns=OneHotNames)
# print(OneHot_df.head())

# 删除原来的38列字符数据  75-38=37
data_df.drop(columns=ob_feature, inplace=True)
# 行合并 37+234[独热编码出来的新列]=271列+label列=272
data_df = pd.concat([OneHot_df, data_df], axis=1)
# print(data_df.head(), data_df.shape)  # (1460, 272)

# feature太多 计算量过大
# 方差过滤
var_index = VarianceThreshold(threshold=0.1)
data = var_index.fit_transform(data_df)
# 获取留下了的索引
index = var_index.get_support(True).tolist()
# print(index)
data_df = data_df.iloc[:, index]
# print(data_df.head(), data_df.shape)  # (1460, 84)

# 相关系数分析--皮尔逊相关系数(根据权重)
features = data_df.columns.tolist()
# print(features)

f_names = []  # pearsonr>0.5的列名
# 存储皮尔逊相关系数的值
pear_num = []
# 每一列都要计算与最后一列的pearsonr>0.5
for i in range(0, len(features) - 1):
    if abs(pearsonr(data_df[features[i]], data_df[features[-1]])[0]) > 0.5:
        f_names.append(features[i])
        pear_num.append(pearsonr(data_df[features[i]], data_df[features[-1]])[0])
# print(f_names, len(f_names))  # 13

# 查看特征之间的相关系数
import matplotlib.pyplot as plt
import seaborn as sns

# 根据相关系数的大小--数据封装,封装成DataFrame
pear_dict = {
    'features': f_names,
    'pearData': pear_num
}
hotPear = pd.DataFrame(pear_dict)
# print(hotPear)

# 皮尔逊相关系数按照从大到小
hotPear.sort_values(by=['pearData'], ascending=False, inplace=True)
# 重置index
hotPear.reset_index(drop=True, inplace=True)
# print(hotPear)

# # 开始绘图
# plt.figure(figsize=(12, 12))
# sns.set(font_scale=0.8)
# cor = np.corrcoef(data_df[f_names].values.T)
# # 数据填充
# sns.heatmap(cor, cbar=False, annot=True, square=True, fmt='0.2f', yticklabels=f_names,
#             xticklabels=f_names)
# # plt.show()

#  舍弃相似度高的三列
f_names.append("SalePrice")
data_df = data_df[f_names]
data_df.drop(['GarageArea', 'TotRmsAbvGrd', '1stFlrSF'], inplace=True, axis=1)
# print(data_df.head(), data_df.shape)

from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsRegressor

# 分出feature->array  label->array
feature_data = data_df.iloc[:, :-1].values
# print(type(feature_data))
label_data = np.ravel(data_df.iloc[:, -1].values)
# print(label_data,type(label_data))
X_train, X_test, y_train, y_test = train_test_split(feature_data, label_data, test_size=0.3, random_state=666)
std = StandardScaler()
X_train_std = std.fit_transform(X_train)
X_test_std = std.fit_transform(X_test)
# print(X_train_std)

# model = KNeighborsRegressor()
# param_list = [
#     {
#         'n_neighbors': list(range(1, 38)),
#         'weights': ['uniform']
#     },
#     {
#         'n_neighbors': list(range(1, 38)),
#         'weights': ['distance'],
#         'p': [i for i in range(1, 21)]
#     }
# ]
# grid = GridSearchCV(model, param_grid=param_list, cv=10)
# grid.fit(X_train_std, y_train)
# print(grid.best_score_)
# print(grid.best_params_)
# print(grid.best_estimator_)
# best_model = grid.best_estimator_

best_model = KNeighborsRegressor(n_neighbors=13, p=1, weights='distance')
# 训练模型
best_model.fit(X_train_std, y_train)
# 模型保存
import joblib

joblib.dump(best_model, "PriceRegModel.model")

# 预测
y_predict = best_model.predict(X_test_std)
# 预测与实际 图示点状图
plt.scatter(y_test, y_predict, label="test")
plt.plot([y_test.min(), y_test.max()],
         [y_test.min(), y_test.max()],
         'k--',
         lw=3,
         label="predict"
         )
plt.show()

预测与实际比对:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React源码分析6-hooks源码

本文将讲解 hooks 的执行过程以及常用的 hooks 的源码。 hooks 相关数据结构 要理解 hooks 的执行过程&#xff0c;首先想要大家对 hooks 相关的数据结构有所了解&#xff0c;便于后面大家顺畅地阅读代码。 Hook 每一个 hooks 方法都会生成一个类型为 Hook 的对象&#xff…

学习->C++篇十八:一文总结C++的异常

目录 C为什么要引入异常&#xff1f; 什么是异常&#xff1f; 怎么使用异常处理错误&#xff1f; 异常的抛出规则&#xff1a; 异常的匹配规则&#xff1a; 单个catch语句&#xff0c;不能完全处理掉异常&#xff1f;重新抛出异常 什么是异常安全问题&#xff1f; 什么…

一、绘制折线图

Origin-绘图 一、新建绘图表格 Add New Column&#xff1a;新建一列 Set as→Y Error设置新列为Y误差 Long Name&#xff1a;X轴和Y轴名称&#xff1b;Units&#xff1a;单位&#xff1b;Comments&#xff1a;注释&#xff1b; 二、绘图 绘制折线图&#xff1a; 选择X、Y、…

2022年,转行IT学哪些编程语言更容易拿高薪?

人们都说年头年尾都是给自己进行规划最好的时段&#xff0c;想要学习编程的你现在是不是也开始进行规划了呢&#xff1f; 不过对大部分人来说&#xff0c;最犹豫的问题也摆在面前&#xff0c;编程语言众多&#xff0c;不知道学什么才能对后续的就业和职业发展有更好的作用。 …

PyTorch 2.0 之 Dynamo: 窥探加速背后的真相

前言 PyTorch 2.0 算是正式官宣了&#xff0c;预计在明年 3 月和大家见面。官方的 blog 宣发了非常多的内容&#xff0c;但是阅读下来不难发现&#xff0c;几乎所有的性能提升、体验优化都源自于 PyTorch 新设计的即时编译工具&#xff1a;Dynamo。 PyTorch eager 模式极佳的…

Flink 在米哈游的应用实践

摘要&#xff1a;本文整理自米哈游大数据实时计算团队负责人张剑&#xff0c;在 Flink Forward Asia 2022 主会场的分享&#xff0c;本篇内容主要分为三个部分&#xff1a;发展历程和平台建设场景应用实践未来展望Tips&#xff1a;点击「阅读原文」获取演讲 ppt01发展历程和平台…

分享一种通信协议的应用编程原理和思路

已剪辑自: https://mp.weixin.qq.com/s/wy-flva6pCNqHV3ObeLPCQ 嵌入式开发过程中&#xff0c;UART、 CAN、 USB等通信基本离不开通信协议。 下面给大家分享一种通信协议&#xff08;MAVLink&#xff09;在应用编程中的编程原理和思路。 本节提供“MAVLink发送接收例程”例程下…

[FTP] ftp通信协议抓包分析

想在ESP32上用TCP来实现ftp服务器&#xff0c;抓一下ftp通信包分析一下。总的来说就是两个TCP通道&#xff0c;一个命令通道&#xff0c;一个数据通道&#xff1b;数据通道只有在遍历目录、下载、上传的时候才开启&#xff0c;其余时候均不开启&#xff1b;主要就是协议对接好就…

【认识】wireshark使用教程

本文章&#xff0c;是简单粗暴学习Wireshark的抓包功能后&#xff0c;记录的一些笔记。 1 Wireshark简介及抓包原理及过程 1.1 简介 Wireshark是1个网络封包分析软件。网络封包分析软件的功能是截取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。Wireshark使用…

从盒马生鲜迫切转型升级有感而发,疫情之后,路在何方

据悉&#xff0c;针对浦东地区目前突增的需求&#xff0c;市民线上采买生活物资的订单激增&#xff0c;饿了么联合包括每日优鲜、大润发在内的主要生鲜买菜商户&#xff0c;一起增加运力配合&#xff1b;盒马生鲜也对接了上海之外的山东、云南等省外基地&#xff0c;以避免中间…

JVM核心知识详解

文章目录1. JVM内存分配程序计数器虚拟机栈栈帧都有哪些内容栈内存溢出线程运行诊断演示1&#xff08;cpu占用过多&#xff09;演示2&#xff08;死锁&#xff09;本地方法栈堆堆内存诊断jmp诊断堆内存jconsole诊断堆内存jvisualvm诊断堆内存方法区直接内存java操作磁盘文件NIO…

IT行业分析报告:2022年哪个编程语言最受雇主公司喜欢?

2022年哪个编程语言最受雇主公司喜欢&#xff1f; 被认为是朝阳行业的IT互联网&#xff0c;软件工程师的平均年薪只涨了0.8%&#xff0c;再加上这两年互联网“寒冬”的说法&#xff0c;很多人不禁会问&#xff0c;现在还能入行IT互联网吗&#xff1f; 今天给大家整理了一份IT行…

Vue全局共享数据之globalData,vuex,本地存储使用方法

目录 一、globalData 二、vuex存储方式 1.vue2用法&#xff0c;2.vue3用法 三、本地存储 uniapp的数据缓存 写在最前面&#xff0c;把vue能用到的存储方法都整理拿出来&#xff0c;方便阅读以及工作用。&#x1f349;&#x1f349;&#x1f349;可以收藏起来即拿即用 Vue全局共…

杨旸:从边缘智能迈向泛在智能

内容来源&#xff1a;2022年11月12日&#xff0c;在全球边缘计算大会上海站上&#xff0c;我们非常荣幸邀请到了特斯联集团首席科学家杨旸博士来分享&#xff0c;杨旸博士曾任上海科技大学教授、科道书院院长、上海雾计算实验室主任&#xff1b;科技部“第五代移动通信系统&…

win10VS2017安装boost库

安装boost库参考&#xff1a;Windows下VS2017下boost库安装配置 https://blog.51cto.com/u_15179769/5633439 下载boost库 官方网站&#xff1a;https://www.boost.org/ 下载链接&#xff1a;https://www.boost.org/users/history/version_1_67_0.html 搜索vs开发人员命令…

JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器

Servlet入门 MVC实战项目 仓储管理系统JavaWeb入门介绍Http协议Http请求数据格式Http响应数据格式Web实战Demo&#xff1a;自定义服务器对比Https协议总结Redis章节复习已经过去&#xff0c;新的章节JavaWeb开始了&#xff0c;这个章节中将会回顾JavaWeb实战项目 仓储管理 代码…

LC-417. 太平洋大西洋水流问题(多源BFS、DFS)

417. 太平洋大西洋水流问题 难度中等558 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数…

[附源码]计算机毕业设计Python的文成考研培训管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

详细复习云开发~小程序【云存储、列表的下拉刷新、列表的分页加载】

文章目录一&#xff0c;云开发~云存储1-1&#xff0c;云开发控制台管理文件1-2&#xff0c;上传图片到云存储1-3&#xff0c;给商品列表加商品图片1-4&#xff0c;上传视频到云存储1-5&#xff0c;上传word&#xff0c;excel文件到云存储1-5-1&#xff0c;上传之前先选择文件1-…

我国数据库现状与未来发展趋势

作者&#xff1a;IT圈黎俊杰 一、数据库现状 &#xff08;一&#xff09;国际数据库市场现状 在看国内数据库市场现状前&#xff0c;先看一组国际市场数据库的应用情况。 以2021年4月份数据国际市场数据库热度排名为例&#xff0c;稳居前三的Oracle、MySQL 和 Microsoft SQL …