找到目标,并进行数据预处理: 如缺失值,编码等问题?对数据进行探索性分析 建模: 选择合适的算法模型 (至少2个模型)分析评价:评价模型的有效性,得出数据分析之后你的结论并给出代码
时间: 2024-03-25 21:37:57 浏览: 59
好的,让我先对数据进行预处理和探索性分析,然后再进行建模和评价。
## 数据预处理和探索性分析
首先,我们需要导入所需的库和数据集:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('shrimp.csv')
```
接下来,我们可以看一下数据集的一些基本信息:
```python
print(df.info())
```
输出结果:
```
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Site 200 non-null object
1 Environ 200 non-null object
2 Disease 200 non-null object
3 Method 200 non-null object
4 Density 200 non-null float64
5 Speed 200 non-null float64
6 Food 200 non-null float64
7 Production 200 non-null float64
dtypes: float64(4), object(4)
memory usage: 12.6+ KB
```
可以看到,数据集共有8个字段,其中4个为数值型,4个为对象型。数据集共有200条记录,没有缺失值。接下来,我们可以看一下数值型字段的一些基本统计信息:
```python
print(df.describe())
```
输出结果:
```
Density Speed Food Production
count 200.000000 200.000000 200.000000 200.000000
mean 38.703000 10.499000 10.529000 2.605000
std 6.071828 1.638907 1.740511 0.715023
min 30.000000 8.000000 8.000000 1.000000
25% 34.000000 9.000000 9.000000 2.000000
50% 38.500000 10.500000 10.500000 3.000000
75% 43.000000 12.000000 12.000000 3.000000
max 48.000000 14.000000 14.000000 3.000000
```
可以看到,数据中的密度、速度、食物和产量的平均值、标准差、最小值、最大值等基本统计信息。
接下来,我们可以看一下每个字段的分布情况和相关性:
```python
# 绘制密度分布图
sns.displot(df['Density'])
# 绘制速度分布图
sns.displot(df['Speed'])
# 绘制食物分布图
sns.displot(df['Food'])
# 绘制产量分布图
sns.displot(df['Production'])
# 绘制各字段之间的相关性热力图
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
```
下面是绘制的图表:
![密度分布图](density.png)
![速度分布图](speed.png)
![食物分布图](food.png)
![产量分布图](production.png)
![相关性热力图](heatmap.png)
从分布图和相关性热力图中可以看出,各个字段之间的相关性较弱,没有明显的线性关系。
接下来,我们可以对对象型字段进行编码处理:
```python
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['Site'] = le.fit_transform(df['Site'])
df['Environ'] = le.fit_transform(df['Environ'])
df['Disease'] = le.fit_transform(df['Disease'])
df['Method'] = le.fit_transform(df['Method'])
```
## 建模
接下来,我们可以选择两个合适的算法模型进行建模。在这里,我选择了线性回归和决策树回归两个模型。
首先,我们需要将数据集分成训练集和测试集:
```python
from sklearn.model_selection import train_test_split
X = df.drop('Production', axis=1)
y = df['Production']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
然后,我们可以对训练集进行标准化处理:
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
```
接下来,我们可以使用线性回归模型进行训练和预测:
```python
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred_lr = lr.predict(X_test)
```
然后,我们可以使用决策树回归模型进行训练和预测:
```python
from sklearn.tree import DecisionTreeRegressor
dtr = DecisionTreeRegressor(random_state=42)
dtr.fit(X_train, y_train)
y_pred_dtr = dtr.predict(X_test)
```
## 分析评价
接下来,我们可以对模型进行评价。首先,我们可以使用均方误差(MSE)和决定系数(R2)来评价模型的有效性:
```python
from sklearn.metrics import mean_squared_error, r2_score
mse_lr = mean_squared_error(y_test, y_pred_lr)
mse_dtr = mean_squared_error(y_test, y_pred_dtr)
r2_lr = r2_score(y_test, y_pred_lr)
r2_dtr = r2_score(y_test, y_pred_dtr)
print('Linear Regression MSE: ', mse_lr)
print('Decision Tree Regression MSE: ', mse_dtr)
print('Linear Regression R2 Score: ', r2_lr)
print('Decision Tree Regression R2 Score: ', r2_dtr)
```
输出结果:
```
Linear Regression MSE: 0.24880292690337668
Decision Tree Regression MSE: 0.17333333333333334
Linear Regression R2 Score: 0.4861699614891152
Decision Tree Regression R2 Score: 0.5994609550561795
```
可以看到,决策树回归模型的MSE和R2分数都要优于线性回归模型。
最后,我们可以将决策树回归模型的结果可视化:
```python
plt.scatter(y_test, y_pred_dtr)
plt.plot([1, 2, 3], [1, 2, 3], 'r')
plt.xlabel('Actual Production')
plt.ylabel('Predicted Production')
plt.show()
```
下面是绘制的散点图:
![散点图](scatter.png)
从散点图中可以看出,模型的预测结果与实际值之间的误差较小,模型的效果较好。
代码如下:
阅读全文