y_test = y_test.reset_index(drop = True) y_predict2 = model_RF1.predict(x_test) plt.figure(figsize = (12,8)) plt.plot(y_predict2,color = 'b',label = 'predict',markersize=8) plt.plot(y_test,color = 'r',label = 'true',markersize=8) plt.xlabel('Test Sample',fontsize=30) plt.ylabel('y1',fontsize=30) plt.title('随机森林',fontsize=30) #坐标轴字体大小 plt.xticks(fontsize=25) plt.yticks(fontsize=25) plt.legend(fontsize=25,loc='upper right') # plt.savefig('GradientBoosting.png',dpi=300,bbox_inches = 'tight')
时间: 2024-01-02 09:05:01 浏览: 99
这段代码的作用是对训练好的随机森林模型进行测试,并将测试结果和真实值进行可视化比较。首先,使用`reset_index()`函数将`y_test`的索引重置为默认值,即0到n-1。接着,使用训练好的`model_RF1`模型对测试集`x_test`进行预测,将预测结果存储在`y_predict2`中。然后,使用`plt.plot()`函数将预测结果和真实值分别用蓝色和红色的线绘制在图表上。接下来,使用`plt.xlabel()`和`plt.ylabel()`函数分别设置x轴和y轴的标签,使用`plt.title()`函数设置图表的标题。然后,使用`plt.xticks()`和`plt.yticks()`函数设置x轴和y轴刻度标签的字体大小。最后,使用`plt.legend()`函数添加图例,并设置字体大小和位置。如果需要保存图表,可以使用`plt.savefig()`函数。
相关问题
帮我用python写代码,O2O优惠券使用预测,提供用户在2016年1月1日至2016年6月30日之间真实线上线下消费行为,预测用户在2016年7月领取优惠券后15天以内的使用情况。训练集为"F:\Pycharm\期末考查题目(二选一)\题目一\data\ccf_offline_stage1_train.csv",测试集为"F:\Pycharm\期末考查题目(二选一)\题目一\data\ccf_offline_stage1_test_revised.csv"。注意,其中存在非数字列'Date_received',请帮我做适当处理,根据优惠券发放及核销情况,构建不同的特征:用户领取的优惠券数量;用户消费过的优惠券数量;用户与商家间的距离。
好的,这是一个比较典型的机器学习项目,需要对数据进行预处理、特征工程、模型训练和预测。我会帮你一步步实现,首先,我们需要导入一些必要的库:pandas、numpy、sklearn等。请确认你已经安装了这些库,如果没有,请使用pip install命令进行安装。以下是代码实现:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import MinMaxScaler
```
接着,我们需要加载训练集和测试集数据,并对数据进行预处理,包括删除空值、将非数字列转换为数字列等。以下是代码实现:
```python
# 加载训练集和测试集
train_df = pd.read_csv('F:\Pycharm\期末考查题目(二选一)\题目一\data\ccf_offline_stage1_train.csv', header=None)
test_df = pd.read_csv('F:\Pycharm\期末考查题目(二选一)\题目一\data\ccf_offline_stage1_test_revised.csv', header=None)
# 删除空值
train_df.dropna(inplace=True)
test_df.dropna(inplace=True)
# 将非数字列转换为数字列
train_df[6] = train_df[6].apply(lambda x: str(x)[:8])
train_df[5] = train_df[5].apply(lambda x: str(x)[:8])
train_df[2] = train_df[2].apply(lambda x: str(x)[:8])
train_df[4] = train_df[4].apply(lambda x: str(x)[:8])
train_df[7] = train_df[7].apply(lambda x: str(x)[:8])
train_df[3] = train_df[3].apply(lambda x: str(x)[:8])
train_df[1] = train_df[1].apply(lambda x: str(x)[:8])
test_df[6] = test_df[6].apply(lambda x: str(x)[:8])
test_df[5] = test_df[5].apply(lambda x: str(x)[:8])
test_df[2] = test_df[2].apply(lambda x: str(x)[:8])
test_df[4] = test_df[4].apply(lambda x: str(x)[:8])
test_df[7] = test_df[7].apply(lambda x: str(x)[:8])
test_df[3] = test_df[3].apply(lambda x: str(x)[:8])
test_df[1] = test_df[1].apply(lambda x: str(x)[:8])
train_df[6] = pd.to_numeric(train_df[6], errors='coerce')
train_df[5] = pd.to_numeric(train_df[5], errors='coerce')
train_df[2] = pd.to_numeric(train_df[2], errors='coerce')
train_df[4] = pd.to_numeric(train_df[4], errors='coerce')
train_df[7] = pd.to_numeric(train_df[7], errors='coerce')
train_df[3] = pd.to_numeric(train_df[3], errors='coerce')
train_df[1] = pd.to_numeric(train_df[1], errors='coerce')
test_df[6] = pd.to_numeric(test_df[6], errors='coerce')
test_df[5] = pd.to_numeric(test_df[5], errors='coerce')
test_df[2] = pd.to_numeric(test_df[2], errors='coerce')
test_df[4] = pd.to_numeric(test_df[4], errors='coerce')
test_df[7] = pd.to_numeric(test_df[7], errors='coerce')
test_df[3] = pd.to_numeric(test_df[3], errors='coerce')
test_df[1] = pd.to_numeric(test_df[1], errors='coerce')
# 对日期进行处理
train_df[8] = train_df[6] - train_df[5]
train_df[9] = train_df[2] - train_df[5]
train_df[10] = train_df[4] - train_df[5]
train_df.drop([0, 1, 2, 3, 4, 5, 6, 7], axis=1, inplace=True)
test_df[8] = test_df[6] - test_df[5]
test_df[9] = test_df[2] - test_df[5]
test_df[10] = test_df[4] - test_df[5]
test_df.drop([0, 1, 2, 3, 4, 5, 6, 7], axis=1, inplace=True)
# 对特征进行归一化处理
scaler = MinMaxScaler()
train_df[[8, 9, 10]] = scaler.fit_transform(train_df[[8, 9, 10]])
test_df[[8, 9, 10]] = scaler.transform(test_df[[8, 9, 10]])
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(train_df.iloc[:, :-1], train_df.iloc[:, -1], test_size=0.3, random_state=0)
```
接下来,我们需要对特征进行处理,构建不同的特征,包括用户领取的优惠券数量、用户消费过的优惠券数量、用户与商家间的距离等。以下是代码实现:
```python
# 构建不同的特征
def get_user_receive_count(df):
temp = df.groupby([0]).size().reset_index(name='counts')
return df.merge(temp, on=[0], how='left')
def get_user_consume_count(df):
temp = df[df[5] != 'null'].groupby([0]).size().reset_index(name='counts')
return df.merge(temp, on=[0], how='left')
def get_user_merchant_distance(df):
temp = df.groupby([0, 3]).size().reset_index(name='counts')
temp['counts'] = temp['counts'].apply(lambda x: 1)
temp = temp.groupby([0])['counts'].sum().reset_index(name='distance')
return df.merge(temp, on=[0], how='left')
X_train = get_user_receive_count(X_train)
X_train = get_user_consume_count(X_train)
X_train = get_user_merchant_distance(X_train)
X_test = get_user_receive_count(X_test)
X_test = get_user_consume_count(X_test)
X_test = get_user_merchant_distance(X_test)
test_df = get_user_receive_count(test_df)
test_df = get_user_consume_count(test_df)
test_df = get_user_merchant_distance(test_df)
X_train.drop([0, 5], axis=1, inplace=True)
X_test.drop([0, 5], axis=1, inplace=True)
test_df.drop([0, 5], axis=1, inplace=True)
```
最后,我们需要使用随机森林算法进行训练和预测。以下是代码实现:
```python
# 训练和预测
rf = RandomForestClassifier(n_estimators=100, random_state=0)
rf.fit(X_train, y_train)
y_pred = rf.predict_proba(X_test)[:, 1]
score = roc_auc_score(y_test, y_pred)
print('AUC Score: {:.4f}'.format(score))
y_pred = rf.predict_proba(test_df)[:, 1]
result = pd.DataFrame({'prob': y_pred})
result.to_csv('result.csv', index=False)
```
这样就完成了O2O优惠券使用预测的代码实现,你可以根据自己的实际情况进行调整。
python对tmdb_5000_movies电影榜单数据集数据分析,建模进行评分预测的具体步骤以及代码实现
好的,下面是对tmdb_5000_movies电影榜单数据集数据进行分析、建模预测的具体步骤和代码实现:
**Step 1: 数据导入和预处理**
首先,我们需要将数据导入,并进行一些基本的预处理,例如处理缺失值和异常值等。
```python
import pandas as pd
import numpy as np
# 导入数据
df = pd.read_csv('tmdb_5000_movies.csv')
# 处理缺失值和异常值
df.dropna(subset=['budget', 'revenue', 'runtime'], inplace=True)
df = df[df['budget'] != 0]
df = df[df['revenue'] != 0]
```
**Step 2: 特征提取**
接下来,我们需要从电影的各种属性中提取有用的特征,例如电影类型、演员和导演的知名度、评分等等。
```python
# 提取电影类型
df['genres'] = df['genres'].apply(lambda x: [i['name'] for i in eval(x)])
# 计算演员和导演的知名度
df['cast'] = df['cast'].apply(lambda x: [i['name'] for i in eval(x)[:5]])
df['director'] = df['crew'].apply(lambda x: [i['name'] for i in eval(x) if i['job'] == 'Director'])
# 计算电影评分
df['score'] = (df['vote_count'] / (df['vote_count'] + df['vote_average'])) * df['vote_average']
```
**Step 3: 数据转换和编码**
由于我们提取的特征包括字符串类型的数据,我们需要对其进行转换和编码。这里我们采用One-Hot编码和LabelEncoder编码两种方法。
```python
# One-Hot编码
genres = df['genres'].apply(pd.Series).stack().reset_index(drop=True)
genres = pd.get_dummies(genres, prefix='genre')
genres = genres.groupby(level=0).sum()
# LabelEncoder编码
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['director'] = df['director'].apply(lambda x: [i.replace(' ', '') for i in x])
df['director'] = le.fit_transform(df['director'])
```
**Step 4: 数据集划分**
将数据集划分为训练集和测试集,以便我们可以用训练集来训练模型,用测试集来评估模型的性能。
```python
# 数据集划分
from sklearn.model_selection import train_test_split
X = pd.concat([df['budget'], df['popularity'], df['runtime'], genres, df['director']], axis=1)
y = df['score']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
**Step 5: 建立评分预测模型**
在这里,我们采用Random Forest方法来建立评分预测模型,并进行模型训练和评估。
```python
# Random Forest模型建立和训练
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 模型评估
y_pred = rf.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print('RMSE:', rmse)
```
**Step 6: 模型优化和调参**
最后,我们可以对模型进行优化和调参,例如增加特征、调整模型参数等,以提高模型的预测准确性和稳定性。
```python
# 增加特征
X = pd.concat([df['budget'], df['popularity'], df['runtime'], genres, df['director'], df['cast']], axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 调整模型参数
rf = RandomForestRegressor(n_estimators=500, max_depth=20, random_state=42)
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print('RMSE:', rmse)
```
以上就是对tmdb_5000_movies电影榜单数据集进行分析、建模预测的具体步骤和代码实现。
阅读全文