机器学习Sklearn 学习总结1——特征工程

目录

一、数据集的划分

二、特征工程

特征抽取/特征提取

 特征抽取案例代码:

归一化与标准化

案例代码

降维

本次案例代码总结:


一、数据集的划分

训练数据:用于训练,构建模型

测试数据:在模型检验时使用,用于评估模型是否有效

from sklearn.model_selection import train_test_split

测试集:20%~30%

二、特征工程

pandas 数据清理、数据处理

特征抽取/特征提取

        机器学习算法 - 统计方法 - 数学公式

                文本类型 ——>数值

                类型——>数值

        特征提取:sklearn.feature_extraction

        字典特征提取 - 类别 ——>one - hot 编码:sklearn.feature_extraction.Dictvectorize

        应用场景

                1)数据集里类别特征较多时

                        数据集类型--》字典类型

                        DictVectorize转换

                2)本身拿到的数据就是字典类型

        文本特征提取

                单词 作为 特征

                特征: 特征词

                方法一: CountVectorizer

                        统计每个样本特征词出现的个数

 特征抽取案例代码:

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  # 文本特征值抽取
import jieba  # 解析字符串为关键字数组


def datasets_demo():
    """
    sklearn数据集使用
    :return:
    """
    # 获取数据集
    iris = load_iris()
    # print("iris数据集:\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)


def dict_demo():
    """
    字典特征抽取
    :return:
    """
    data = [{"city": "北京", 'temperature': 100}, {"city": "上海", "temperature": 60}, {"city": "深圳", "temperature": 30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse=False)  # 不返回稀疏矩阵

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

    return None


def count_demo():
    """
    文本特征抽取
    :return:
    """
    data = ["life is short,i 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())

    return None


def count_chinese_demo():
    """
    中文文本特征抽取
    :return:
    """
    data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
    # 1、实例化一个转换器类
    transfer = CountVectorizer()

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

    return None


def cut_word(text):
    """
    进行中文分词:”我爱北京天安门“——》”我 爱 北京 天安门“
    :param text:
    :return:
    """
    text = " ".join(list(jieba.cut(text)))
    return text


def count_chinese_demo2():
    """
    中文文本特征抽取,自动分词
    :return:
    """
    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_new = transfer.fit_transform(data_new)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


def tfidf_demo():
    """
    用TF-IDF的方法进行文本特征抽取
    :return:
    """
    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_new = transfer.fit_transform(data_new)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


if __name__ == '__main__':
    # 代码1:sklearn数据集使用
    # datasets_demo()
    # 代码二:字典特征值抽取
    # dict_demo()
    # 代码3: 文本特征抽取: CountVecotrizer
    # count_demo()
    # 代码4: 中文文本特征抽取: CountVecotrizer
    # count_chinese_demo()
    # 代码5:中文文本特征抽取,自动分词
    # count_chinese_demo2()
    # 代码6:中文分词
    # print(cut_word("我爱北京天安门"))
    # 代码7: 用TF-IDF的方法进行文本特征抽取
    tfidf_demo()

归一化与标准化

无量纲化

归一化:

        异常值:最大值、最小值

标准化:

        (x-mean)/std

        标准差: 集中程度

        应用场景:

        在已有样本比较多的情况下比较稳定,适合现代嘈杂大数据场景。

案例代码

from sklearn.preprocessing import MinMaxScaler, StandardScaler  # 归一化,标准化
import pandas as pd


def minmax_demo():
    """
    归一化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]

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

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)

    return None


def stand_demo():
    """
    标准化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]

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

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)

    return None


if __name__ == '__main__':
    # 代码8:归一化
    # minmax_demo()
    # 代码9: 标准化
    stand_demo()

降维

特征选择

本次案例代码总结:

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 scipy.stats import pearsonr  # 皮尔逊系数
from sklearn.decomposition import PCA
import jieba
import pandas as pd


def datasets_demo():
    """
    sklearn数据集使用
    :return:
    """
    # 获取数据集
    iris = load_iris()
    # print("iris数据集:\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)


def dict_demo():
    """
    字典特征抽取
    :return:
    """
    data = [{"city": "北京", 'temperature': 100}, {"city": "上海", "temperature": 60}, {"city": "深圳", "temperature": 30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse=False)  # 不返回稀疏矩阵

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

    return None


def count_demo():
    """
    文本特征抽取
    :return:
    """
    data = ["life is short,i 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())

    return None


def count_chinese_demo():
    """
    中文文本特征抽取
    :return:
    """
    data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
    # 1、实例化一个转换器类
    transfer = CountVectorizer()

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

    return None


def cut_word(text):
    """
    进行中文分词:”我爱北京天安门“——》”我 爱 北京 天安门“
    :param text:
    :return:
    """
    text = " ".join(list(jieba.cut(text)))
    return text


def count_chinese_demo2():
    """
    中文文本特征抽取,自动分词
    :return:
    """
    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_new = transfer.fit_transform(data_new)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


def tfidf_demo():
    """
    用TF-IDF的方法进行文本特征抽取
    :return:
    """
    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_new = transfer.fit_transform(data_new)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


def minmax_demo():
    """
    归一化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]

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

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)

    return None


def stand_demo():
    """
    标准化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]

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

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)

    return None


def variance_dmeo():
    """
    过滤低方差特征
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]

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

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

    # 计算某两个变量之间的相关系数
    r = pearsonr(data['pe_ratio'], data["pb_ratio"])
    print("相关系数:\n", r)

    return None


def pca_demo():
    """
    PCA降维
    :return:
    """
    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)

    return None;


if __name__ == '__main__':
    # 代码1:sklearn数据集使用
    # datasets_demo()
    # 代码二:字典特征值抽取
    # dict_demo()
    # 代码3: 文本特征抽取: CountVecotrizer
    # count_demo()
    # 代码4: 中文文本特征抽取: CountVecotrizer
    # count_chinese_demo()
    # 代码5:中文文本特征抽取,自动分词
    # count_chinese_demo2()
    # 代码6:中文分词
    # print(cut_word("我爱北京天安门"))
    # 代码7: 用TF-IDF的方法进行文本特征抽取
    # tfidf_demo()
    # 代码8:归一化
    # minmax_demo()
    # 代码9: 标准化
    # stand_demo()
    # 代码10: 过滤低方差特征
    # variance_dmeo()
    # 代码11:PCA降维
    pca_demo()
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值