Sklearn(机器学习)实战:鸢尾花数据集处理技巧

发布于:2025-09-10 ⋅ 阅读:(14) ⋅ 点赞:(0)

1.数据集的使用:

先使用load导入鸢尾花数据:

from sklearn.datasets import load_iris

然后定义一个函数来查看鸢尾花数据集:

数据集的获取:

iris = load_iris()
    print('鸢尾花的数据集:\n',iris)

使用iris['DESCR']来查看数据及里面的描述:

print('查看数据集描述:\n',iris['DESCR'])

获取特征值的名字iris.feature_names

print('查看特征值的名字:\n',iris.feature_names)

查看特征值:iris.data

特征值的形状:iris.data.shape:特征值是150行4列的数据

print('查看特征值:\n', iris.data,iris.data.shape)

数据集划分:

先导入对应模块:

from sklearn.model_selection import train_test_split
  • iris.data
    表示鸢尾花数据集的特征矩阵(即输入数据),通常是一个二维数组或矩阵,每一行代表一个样本,每一列代表一个特征(如花萼长度、花萼宽度等)。

  • iris.target
    表示鸢尾花数据集的标签(即目标值),通常是一个一维数组,每个元素对应一个样本的类别(如0、1、2分别代表不同品种的鸢尾花)。

  • test_size=0.2
    指定测试集的比例为20%,即训练集占80%。可以是浮点数(比例)或整数(样本数)。

  • random_state=22
    随机种子,用于控制数据分割的随机性。固定此值可确保每次运行代码时,划分结果一致(适用于可复现的实验)。

输出变量说明

  • x_train
    训练集的特征数据,包含80%的原始样本特征,用于训练模型。

  • x_test
    测试集的特征数据,包含20%的原始样本特征,用于评估模型性能。

  • y_train
    训练集的标签数据,与 x_train 中的样本一一对应。

  • y_test
    测试集的标签数据,与 x_test 中的样本一一对应。

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)

完整代码:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

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

    return None

if __name__ == '__main__':
    datasets_demo()

2.字典特征抽取:

导入对应模块:

from sklearn.feature_extraction import DictVectorizer

先定义一些数据:

 data=[
        {'city':'北京','temperature':100},
        {'city':'上海','temperature':50},
        {'city':'深圳','temperature':60}
    ]

第一步先实例化一个转换器:

 sparse默认是true 返回的是一个稀疏矩阵,需要将其改为False才能够得到对应的矩阵,如果默认不写将出现下列的情况:

transformer = DictVectorizer(sparse=False)

第二步调用fit_transform()并输出打印:

  data_new=transformer.fit_transform(data)
    print(data_new)
    print('特征的名字:\n',transformer.get_feature_names_out())

完整代码:

from sklearn.feature_extraction import DictVectorizer

def dict_demo():
    """
    字典特征抽取
    :return:
    """
    data=[
        {'city':'北京','temperature':100},
        {'city':'上海','temperature':50},
        {'city':'深圳','temperature':60}
    ]
    #1.实例化一个转换器类
    # sparse默认是true 返回的是一个稀疏矩阵
    transformer = DictVectorizer(sparse=False)
    #2.调用fit_transform()
    data_new=transformer.fit_transform(data)
    print(data_new)
    print('特征的名字:\n',transformer.get_feature_names_out())

    return None

if __name__ == '__main__':
    dict_demo()

3.文本特征抽取:统计样本出现的次数

导入对应模块:

from sklearn.feature_extraction.text import CountVectorizer

随便定义一些单词:

 data=["life is short ,i like like python","life is too long,i dislike python"]

第一步还是实例化一个转换器:

transformer = CountVectorizer()

第二步调用:

toarray()是sparse矩阵里的一个方法作用是一样的

data_new=transformer.fit_transform(data)
    print(data_new.toarray()) 
    print('特征名字:',transformer.get_feature_names_out())

完整代码:


from sklearn.feature_extraction.text import CountVectorizer

def count_demo():
    """
    文本特征抽取:
             统计样本出现的次数
    :return:
    """
    data=["life is short ,i like like python","life is too long,i dislike python"]

    #1.实例化一个转换器
    transformer = CountVectorizer()
    # 2.调用fit_transform
    data_new=transformer.fit_transform(data)
    print(data_new.toarray())  # toarray()是sparse矩阵里的一个方法作用是一样的
    print('特征名字:',transformer.get_feature_names_out())

if __name__ == '__main__':
    count_demo()

4.中文文本抽取特征:

导入所需要的库:

import jieba
from sklearn.feature_extraction.text import CountVectorizer

随机写入一些中文:

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

首先我们应该先定义一个jieba函数:

将这些数据先转为列表要不然输出台会出现生成器不便于观察,在用字符串拼接起来:

def cut_words(text):
    """
    进行中文分词
    :param text:
    :return:
    """
    return "".join(list(jieba.cut(text)))

定义一个空的列表,来对上后面的data进行遍历并添加到这个空列表中:

data_new=[]
    for item in data:
        data_new.append(cut_words(item))

完整代码:

import jieba
from sklearn.feature_extraction.text import CountVectorizer

def cut_words(text):
    """
    进行中文分词
    :param text:
    :return:
    """
    return "".join(list(jieba.cut(text)))

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

    data_new=[]
    for item in data:
        data_new.append(cut_words(item))

     # 1.实例化一个转换器
    transformer = CountVectorizer()
    # 2.调用fit_transform
    data_new = transformer.fit_transform(data_new)
    print(data_new.toarray())  # toarray()是sparse矩阵里的一个方法作用是一样的
    print('特征名字:', transformer.get_feature_names_out())
    return None

if __name__ == '__main__':
    count_words()

5.TFIDF文本抽取

导入对应模块

from sklearn.feature_extraction.text import TfidfVectorizer

完整代码:

from sklearn.feature_extraction.text import TfidfVectorizer


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


     # 1.实例化一个转换器
    transformer = TfidfVectorizer()
    # 2.调用fit_transform
    data_new = transformer.fit_transform(data)
    print(data_new.toarray())  # toarray()是sparse矩阵里的一个方法作用是一样的
    print('特征名字:', transformer.get_feature_names_out())
    return None

if __name__ == '__main__':
    Tfidf_words()


网站公告

今日签到

点亮在社区的每一天
去签到