sklearn自带数据集的使用以及特征提取、特征预处理

一、sklearn自带数据集的使用
1.导入鸢尾花数据集,查看你数据集的描述以及特征

from sklearn.datasets  import load_iris

def datasets_demo():
    iris = load_iris()
    print("鸢尾花数据集:\n",iris)
    print("查看数据集描述:\n",iris["DESCR"])
    print("查看特征值的名字:\n",iris.feature_names)
    print("查看特征值:\n",iris.data)
    print("查看特征值形状:\n",iris.data.shape)
    return None
if __name__ == "__main__":
    datasets_demo()

2.划分数据集

sklearn.model_selection.train_test_split()方法用来划分数据集
参数:

  • x:数据集的特征值
  • y:数据集的标签值
  • test_size:测试集的大小,默认为0.2
  • random_state:随机数种子,不同的种子会造成不同的随机采样结果,相同的种子结果相同

返回:训练集特征值、测试集特征值、训练集标签值、测试集标签值

from sklearn.datasets  import load_iris
from sklearn.model_selection import train_test_split
def datasets_demo():
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n",iris)
    print("查看数据集描述:\n",iris["DESCR"])
    print("查看特征值的名字:\n",iris.feature_names)
    print("查看特征值:\n",iris.data)
    print("查看特征值形状:\n",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)
    print("测试集的特征值:\n",x_test,x_test.shape)
    return None
if __name__ == "__main__":
    datasets_demo()

二、特征工程
数据和特征决定机器学期的上限、而模型和算法只是接近这个上限

  • pandas:一个数据读取非常方便以及基本的处理格式的工具
  • sklearn:对于特征的处理提供了强大接口

特征工程包含:特征提取、特征预处理、特征降维

2.1 特征提取
将任意数据(文本护着图像)转化为可用于机器学习的数字特征
sklearn.feature_extraction

2.1.1 字典特征提取
对字典数据进行特征值化

  • sklearn.feature_extraction.DictVectorzier(sparse=True,…)
    将特征值都处理成one-hot编码
    DictVectorizer.fit_transform(x) 参数x:字典或者包含字典的迭代器,返回值:返回sparse矩阵
    DictVectorizer.inverse_transform(x) 参数x:array数组或者sparse矩阵,返回值:转换之前数据格式
    DictVectorizer.get_feature_names()返回类别名称

使用:
对一下数据进行特征提取
[{‘city’:‘北京’,‘temperature’:100},
{‘city’:‘上海’,‘temperature’:60},
{‘city’:‘深圳’,‘temperature’:30}]

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer

def dict_demo():
    data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}]
    #实例一个转换器类
    transfer = DictVectorizer(sparse=False)
    #调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new)
    print("特征名称:\n",transfer.get_feature_names())
    return None

if __name__== "__main__":
    dict_demo()

在这里插入图片描述
这里可以看到输出并不是我们想象中的二维数组,这是因为当我们实例化DictVectorizer时,他默认有一个参数sparse=True,如果想要得到二维数组形式,需要将sparse=False,但两者应该是等价的,前者对应后者在数组中的位置
在这里插入图片描述

2.1.2文本特征提取

- sklearn.feature_extraction.text.CountVectorizer()

统计每一个样本特征值出现的次数
例:英文文本分词

{"Life is short,i like like python",
"Life is too long,i dislike python"}
def count_demo():
    """
    文本特征提取
    """
    data = {"Life is short,i like like python","Life is too long,i dislike python"}
    transfer=CountVectorizer()
    data_new=transfer.fit_transform(data)
    print(data_new)

在这里插入图片描述
这里我们看到输出又不是我们想要的,这是我想同上面的例子一样在CountVectorizer中加入sparse=False发现行不通,但是sparse矩阵里面有一个默认的方法toarray(),我们可以直接调用这个方法

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer

def count_demo():
    data = {"Life is short,i like like python","Life is too long,i dislike python"}
    #实例化一个转化器
    transfer = CountVectorizer()
    #调用transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new.toarray())
    print("特征名字:\n",transfer.get_feature_names())
    return None
if __name__ == '__main__':
    count_demo()

在这里插入图片描述
如果是中文的话,需要用到jieba分词

 data = {"在北上广深,软考证书可以混个工作居住证,也是一项大的积分落户筹码。",
            "升职加薪必备,很多企业人力资源会以此作为审核晋升的条件。",
            "简历上浓彩重抹一笔,毕竟是国家人力部、工信部承认的IT高级人才。"}
    data_new=[]
    for sent in data:
        data_new.append(" ".join(list(jieba.cut(sent))))
    print(data_new)

使用jieba将中文文本分词后转换为列表,然后用空格拼接成字符串,然后把三句话的结果放到列表里。
剩下的和上面英文文本的分词一样

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
import jieba

def cut_word(text):
    return " ".join(list(jieba.cut(text)))
def count_chinese_demo():
    data = {"在北上广深,软考证书可以混个工作居住证,也是一项大的积分落户筹码。",
            "升职加薪必备,很多企业人力资源会以此作为审核晋升的条件。",
            "简历上浓彩重抹一笔,毕竟是国家人力部、工信部承认的IT高级人才。"}
    data_new=[]
    for sent in data:
        data_new.append(cut_word(sent))
    #实例化一个转化器
    transfer = CountVectorizer()
    #调用transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n",data_final.toarray())
    print("特征名字:\n",transfer.get_feature_names())
    return None
if __name__ == '__main__':
    count_chinese_demo()

在这里插入图片描述

- sklearn.feature_extraction.text.TfidfVectorizer()
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类

def Tfidf():
    data = {"在北上广深,软考证书可以混个工作居住证,也是一项大的积分落户筹码。",
            "升职加薪必备,很多企业人力资源会以此作为审核晋升的条件。",
            "简历上浓彩重抹一笔,毕竟是国家人力部、工信部承认的IT高级人才。"}
    data_new = []
    for sent in data:
        data_new.append(" ".join(list(jieba.cut(sent))))
    transfer =TfidfVectorizer()
    data_final = transfer.fit_transform(data_new)
    print(data_final.toarray())
    print(transfer.get_feature_names())

2.2 特征预处理
无量纲化,使不同规格的数据转换到同一规格

sklearn.preprocessing

2.2.1 归一化
通过原始数据进行变换把数据映射到 [0,1](默认)之间

sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)…)
 - MinMaxScalar.fit_transform(X)   
 		参数X:numpy array格式的数据[n_samples,n_features]
 - 返回值:转换后的形状相同的array

在这里插入图片描述

import pandas as pd
from sklearn.preprocessing import MinMaxScaler


def minmax_demo():
    data=pd.read_csv("D:\\tools\python\pythondata.txt")
    data=data.iloc[:,:3]  #只取数据的前三列
    print("data:\n",data)
    transfer=MinMaxScaler()  #默认0到1
    data_new=transfer.fit_transform(data)
    print("data_new:\n",data_new)
minmax_demo()

在这里插入图片描述
数据根据最大值和最小值进行计算,但这两个值非常容易受异常点影响,所有这种方法鲁棒性较差,只适合传统精确小数据场景。

2.2.2 标准化
通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内
在这里插入图片描述

 sklearn.preprocessing.StandardScaler()
 - StandardScaler.fit_transform(X)   
 		参数X:numpy array格式的数据[n_samples,n_features]
 - 返回值:转换后的形状相同的array

经过处理之后,对每列来说,所以体验数据都聚集在均值为0附近,标准差为1

def stand_demo():
    data=pd.read_csv("D:\\tools\python\pythondata.txt")
    data=data.iloc[:,:3]  #只取数据的前三列
    print("data:\n",data)
    transfer=StandardScaler()  #默认0到1
    data_new=transfer.fit_transform(data)
    print("data_new:\n",data_new)

在这里插入图片描述
在已有样本足够多的的情况下比较稳定,适合现代嘈杂的大数据场景

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sklearn.datasets是scikit-learn库用于加载和处理数据集的模块。可以使用fetch_20newsgroups_vectorized函数加载20个新闻组数据集并将其转换为tf-idf向量。使用该函数的默认设置,可以方便地完成tf-idf转换。首先,需要导入相关的库和模块,如下所示: ```python from sklearn.datasets import fetch_20newsgroups_vectorized from sklearn.utils import shuffle from sklearn.model_selection import train_test_split ``` 然后,可以使用fetch_20newsgroups_vectorized函数加载数据集,并将其转换为tf-idf向量。示例代码如下: ```python bunch = fetch_20newsgroups_vectorized(subset='all') X, y = shuffle(bunch.data, bunch.target) print(X.shape) # (18846, 130107) ``` 数据集可以通过shuffle函数进行洗牌,以打乱数据的顺序。接下来,可以使用train_test_split函数将数据集划分为训练集和测试集。示例代码如下: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) print(X_train.shape) # (13192, 130107) print(X_test.shape) # (5654, 130107) ``` 这样就完成了使用sklearn.datasets.fetch_20newsgroups_vectorized加载数据集并进行划分的过程。\[1\] #### 引用[.reference_title] - *1* *3* [sklearn基础篇(一)-- datasets数据集](https://blog.csdn.net/xq151750111/article/details/127412337)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [sklearn自带数据集使用以及特征提取特征预处理](https://blog.csdn.net/qq_32350719/article/details/97396547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值