机器学习实验一

UCI数据库中有一个著名的数据集叫做Iris(鸢尾花)数据集,它用于分类问题的机器学习任务。这个数据集描述了三种不同种类的鸢尾花:Setosa、Versicolor和Virginica。每个样本有四个特征:萼片长度(sepal length)、萼片宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width)。

要对Iris数据集进行分析,首先需要获取数据集并加载到分析环境中。可以通过访问UCI数据库的网站(https://archive.ics.uci.edu/ml/datasets/iris鸢尾花数据集)来获取Iris数据集的下载链接。

数据清洗:

在Python中对Iris数据集进行数据清洗的过程通常包括以下步骤:

1. 导入必要的库:在开始清洗之前,首先导入需要使用的库,如`pandas`和`numpy`。

import pandas as pd
import numpy as np

2. 加载数据集:使用`pandas`库的`read_csv()`函数加载数据集。

data = pd.read_csv('path_to_iris_dataset.data') #path_to_iris_dataset.data为下载的数据集

3. 检查数据集:查看数据集的前几行以及基本信息,确保数据加载正确并了解数据的结构。


print(data.head())
print(data.info())

4. 处理缺失值:检查数据集中是否有缺失值,如果有,可以根据情况进行处理。以下是两种常见的处理方式:

- 删除含有缺失值的行:

data.dropna(inplace=True)

- 填充缺失值,例如使用特征的平均值或中位数:

data.fillna(data.mean(), inplace=True)

5. 处理重复值:检查并删除数据集中的重复值。

data.drop_duplicates(inplace=True)

6. 处理异常值:对于可能存在异常值的特征,可以根据领域知识或统计方法进行处理。一种常见的方法是使用正态分布的3σ原则来识别和删除异常值。

mean = data['feature'].mean()
std = data['feature'].std()
threshold = 3 * std
data = data[(data['feature'] > mean - threshold) & (data['feature'] < mean + threshold)]

将 `'feature'` 替换为实际的特征名称。

7. 数据转换:如果需要对数据进行转换(例如将类别特征转换为数值编码),可以使用`pandas`的相关函数,如`map()`或`replace()`。

8. 保存清洗后的数据集:将清洗后的数据保存到新的文件中,以便后续分析。

data.to_csv('cleaned_iris_dataset.csv', index=False)

请将 `'cleaned_iris_dataset.csv'` 替换为你想要保存数据集的实际路径和文件名。

任务一:

计算鸢尾花数据集的基本统计数据并画出趋势图,可以使用`pandas`和`matplotlib`库来完成这些任务。以下是一些示例代码:

import pandas as pd
import matplotlib.pyplot as plt

# 加载数据集
data = pd.read_csv('path_to_lris.data', header=None, names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])

# 基本统计数据
statistics = data.describe()
print(statistics)

# 不同类别的统计数据
class_statistics = data.groupby('class').describe()
print(class_statistics)

# 趋势图
data.plot(x='sepal_length', y='sepal_width', kind='scatter')
plt.title('Sepal Width vs. Sepal Length')
plt.show()

data.plot(x='petal_length', y='petal_width', kind='scatter')
plt.title('Petal Width vs. Petal Length')
plt.show()

# 不同类别的趋势图
class_names = data['class'].unique()
for class_name in class_names:
    class_data = data[data['class'] == class_name]
    class_data.plot(x='sepal_length', y='sepal_width', kind='scatter', label=class_name)
    plt.title('Sepal Width vs. Sepal Length - {}'.format(class_name))
    plt.legend()
    plt.show()

    class_data.plot(x='petal_length', y='petal_width', kind='scatter', label=class_name)
    plt.title('Petal Width vs. Petal Length - {}'.format(class_name))
    plt.legend()
    plt.show()

将`path_to_lris.data`替换为实际的数据集路径。

以上代码首先加载数据集,并计算了整体数据集的基本统计数据(均值、标准差、最小值、最大值等),使用`describe()`函数实现。接着,根据不同的类别进行分组,并计算每个类别的统计数据。

然后,代码绘制了两个趋势图,分别是萼片宽度与萼片长度的关系,以及花瓣宽度与花瓣长度的关系。通过调用`plot()`函数,指定x轴和y轴的特征列,以及图表类型为散点图(kind='scatter')。使用`plt.title()`函数为图表添加标题,并通过`plt.show()`显示图表。

最后,代码绘制了不同类别的趋势图,分别展示了不同类别的萼片宽度与萼片长度的关系,以及花瓣宽度与花瓣长度的关系。通过在循环中筛选每个类别的数据,并使用`label`参数为每个类别的图表添加图例,实现了不同类别的趋势图的绘制。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值