1.什么是特征?
以存储在SQL数据库表中的数据为例。表由行和列组成,表中包含整形数据、字符串数据、日期字段等。现在我们要想对日期列进行一些分析,但是它并没有直接的应用价值。所以,首先编写一个程序(或脚本)来提取任意特定的日期,并创建带有该信息的单独列。现在将七天(星期一...星期日)存储在一个新项目中。然后创建一个项目来检查某一天是周末还是工作日。创建另一个字段is_weekend,如果那天是周末,则其为True;否则为False。可以用它来分析预测模型,这就是特征。
特征应用于以下几个方面:
- 计算机视觉技术,如图像像素、边缘、角点等。
- 语音识别,如声音、噪音等方面。
2.特征工程
数据科学家在解决任何问题的时候,都会花费超过一半的时间来选择正确的特征。在特征工程中花费时间是有一定好处的,如以下几点。
- 使简单模型的执行效果比复杂模型要好。
- 减少模型选择时间,增加了简单模型的预测能力。
- 通过简化模型来缩短训练时间。
特征提取:通过对现有特征集进行一些交换,来选择新特征以去除冗余的过程
特征选择:从数据中选择特征子集技术,它和特征提取不同,后者是创建新特征的过程。特征选择是从数据本身中找到有用的特 征。在特征选择中常使用的两种方法:过滤法、包装法。还有嵌入法,岭回归和套索回归等。
3.特征工程通用准则
3.1 处理数值特征
最大最小标准化:Xnew=(Xi-min(X))/(max(X)-min(X))
Z-分数标准化:Z=(X-mean(X))/StdDev(X)
3.2 处理分类特征
分类特征是指包含预定义集合值的特征。例如,性别、颜色等。处理分类特征是将数据放入预定义的类别中。
3.3 处理基于时间的特征
略
3.4 处理文本特征
略
4 用python进行特征工程
4.1 Pandas的基本操作
Pandas能够快熟灵活地对关系数据进行访问。在Pandas中两个主要的数据结构是Series(一维数据结构)和DataFrame(二维数据结构)。
安装Pandas:
pip install pandas
导入Pandas:
import pandas
读入csv文件:
csv_file = pandas.read_csv(fileName) #此命令将创建一个DataFrame并将数据从文件中加载到DataFrame里。
读取excel文件:
exl_file = pandas.read_excel(fileName)
读取JSON文件:
Json_file = pandas.read_json(fileName)
读取保存对象(Python pickle)
pickle_frame = pandas.read_pickle(fileName) #此操作可用于保存在DataFrame中完成的一些操作。
读取HTML:
html_table = pandas.read_html(url) #从给定的URL中读取HTML表。
4.2 数据输出
#导出数据文件到csv文件
csv_file.to_csv(fileName)
#导出数据文件到excel文件
exl_file.to_excel(fileName)
#导出数据文件到json文件对象
json_file.to_json(fileName)
#导出数据文件到pickle对象
pickle_freme.to_pickle(fileName)
#导出数据文件到html表
html_table.to_html(fileName)
4.3 数据选择
Pandas 的DataFrame是行的集合,每行都有一些预定的列。数据选择包括分割DataFrame和提取所需信息的技术。
下面通过一个例子来介绍数据选择:
product_df = pandas.read_csv('product_data.csv')
product_df['Columu'] #通过[ ]指定列的名称来完成。
如果是多列选择,则需要指定列表。
listOfCols = ['Columu1','Columu2']
product_df['listOfCols ']
# 上述代码可以合并为以下形式
product_df [['ProductName','Cost']]
想要基于行选择数据,则可以这样操作:
#选择引索为2的行
index = 2
product_df.loc[index]
#选择引索小于2的行
index = 2
product_df.loc[:index]
#选择前两行
row = 2
product_df.iloc[:row]
#选择后两行
row = 2
product_df.iloc[-row:]
#选择所有行的前三列
product_df.iloc[:,1,4]
条件选择:可以根据条件选择数据
product_df[product_df['Cost']>=30000]
product_df[(product_df['Cost']>=30000)&product_df['ShippingLocation']=='Delhi')] #AND操作
product_df[(product_df['Cost']>=30000)/product_df['ShippingLocation']=='Delhi')] #OR操作
显示不满足条件的数据。
product_df[~product_df['Cost']>=30000]