机器学习入门之 特征工程

数据集

数据集划分 ,训练集与 测试集合

python 复制代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.feature_selection import VarianceThreshold
from sklearn.decomposition import PCA
from scipy.stats import pearsonr
import jieba
import pandas as pd

# 获取数据集
iris = load_iris()
print("鸢尾花数据集:\n", iris)
print("查看数据集描述:\n", iris["DESCR"])
print("查看特征值的名字:\n", iris.feature_names)
print("查看特征值:\n", iris.data, iris.data.shape)

# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
print("训练集的特征值:\n", x_train, x_train.shape)

特征抽取

让计算机更好理解数据 特征值化

字典特征抽取

python 复制代码
    data = [{'city': '北京','temperature':100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse=True)
    # 2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray(), type(data_new))
    print("特征名字:\n", transfer.get_feature_names())

文本特征抽取

英文 文本特征抽取 根据空格

python 复制代码
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、实例化一个转换器类
    transfer = CountVectorizer(stop_words=["is", "too"])

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

中文 文本特征抽取 jieba 分词

python 复制代码
    # 将中文文本进行分词
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 1、实例化一个转换器类
    transfer = CountVectorizer(stop_words=["一种", "所以"])

    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())

TFIDF

TF 词频 (term frequency,tf) 指的是某一个给定的词语在该文件中出现的频率

IDF - 逆向文档频率 (inverse document frequency,idf) 是一个词语普遍重要性的度

量。某一特定词语的idf 可以由总文件数目除以包含该词语之文件的数目,再将得
到的商取以10为底的对数得到

例子:

假如一篇文件的总词语数是100个,而词语"母牛"出现了3次,那么"母牛"一词在该文件中的词频就是3/100=0.03。

一个计算文件频率 (IDF) 的方法是文件集里包含的文件总数除以测定有多少份文件出现过"母牛"一词。所以,如果"母牛"一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是 lg(10,000,000 / 1,000)=4。最后的TF-IDF的分数为0.03 * 4=0.12。

python 复制代码
    # 将中文文本进行分词
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 1、实例化一个转换器类
    transfer = TfidfVectorizer(stop_words=["一种", "所以"])

    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())

特征预处理

特征单位 或者大小太大 会导致 某些 特征的方差 要比其他特征大几个数量级, 容易支配影响目标结果 例如计算样本距离knn

归一化

例子

x' = (90-60)/(90-60) =1

x'' = 1*1+0=1

python 复制代码
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=[2, 3])

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

缺点 :异常值:最大值、最小值 ,会影响 归一化

标准化

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

X 是数据值,μ 是数据集的平均值,σ 是标准差。

例子

平均值 = (90+60+75)/3 =75

差值 = (90-75) ,(60-75), (75-75) = 15,-15,0

σ 标准差 = √((15^2 +(-15)^2 +0 )/3) = √150=12.25

x' = (90 - (90+60+75)/3)/ 12.25 =1.22

python 复制代码
# 1、获取数据

data = [[90,2,10,40],[65,4,15,45],[75,3,13,46]]
print("data:\n", data)

# 2、实例化一个转换器类
transfer = StandardScaler()

# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)

特征降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组"不相关"主变

量的过程

  1. 低方差特征过滤
    如果特征方差小 那说明特征比较集中 样本值相近
python 复制代码
data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = VarianceThreshold(threshold=10)

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)

皮尔逊相关系数

例子

python 复制代码
    # 计算某两个变量之间的相关系数
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
    print("相关系数:\n", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("revenue与total_expense之间的相关性:\n", r2)

特征与特征之间相关性很高:

1)选取其中一个

2)加权求和

3)主成分分析

主成分分析 PCA

定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数

据、创造新的变量
作用:是数据维数压缩, 尽可能降低原数据的维数(复杂度),损失少量 信息。

回归分类使用

python 复制代码
    data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

    # 1、实例化一个转换器类
    transfer = PCA(n_components=0.95)

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

降维 案例

python 复制代码
## 三张表  goods 商品 goods_type 商品分类 goods_orde  用户订单
import pandas as pd
import pymysql

# 连表查出 用户 以及商品分类信息
con = pymysql.connect(host="192.168.12.211",user="root",password="root",db="xl_vip")
data_sql=pd.read_sql("SELECT g.id,g.goods_name,gt.id,gt.`name`,gt.description,gt.parent_id,go.id,go.login_name, go.pay_price from goods_order as go  INNER JOIN goods   g on go.goods_id=g.id INNER JOIN goods_type as gt on gt.id=g.goods_type_id",con)


== 进行 PCA 降维
from sklearn.decomposition import PCA

transfer = PCA(n_components=0.95)
data_new = transfer.fit_transform(table)
相关推荐
幻风_huanfeng10 分钟前
线性代数中的核心数学知识
人工智能·机器学习
volcanical18 分钟前
LangGPT结构化提示词编写实践
人工智能
weyson1 小时前
CSharp OpenAI
人工智能·语言模型·chatgpt·openai
RestCloud1 小时前
ETLCloud异常问题分析ai功能
人工智能·ai·数据分析·etl·数据集成工具·数据异常
IT古董1 小时前
【机器学习】决定系数(R²:Coefficient of Determination)
人工智能·python·机器学习
鲜枣课堂1 小时前
5G-A如何与AI融合发展?华为MBBF2024给出解答
人工智能·5g·华为
武子康2 小时前
大数据-213 数据挖掘 机器学习理论 - KMeans Python 实现 距离计算函数 质心函数 聚类函数
大数据·人工智能·python·机器学习·数据挖掘·scikit-learn·kmeans
武子康2 小时前
大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels
大数据·人工智能·python·深度学习·算法·机器学习·数据挖掘
weixin_518285053 小时前
深度学习笔记11-神经网络
笔记·深度学习·神经网络
封步宇AIGC3 小时前
量化交易系统开发-实时行情自动化交易-Okex K线数据
人工智能·python·机器学习·数据挖掘