python从date目录导入数据集_使用python划分数据集

importglobimportos.pathimportrandomimportnumpy as np#图片数据文件夹

INPUT_DATA = './flower_data'

#这个函数从数据文件夹中读取所有的图片列表并按训练、验证、测试数据分开#testing_percentage和validation_percentage指定了测试数据集和验证数据集的大小

defcreate_image_lists(testing_percentage,validation_percentage):#得到的所有图片都存在result这个字典里,key为类别的名称,value值也是一个字典,存放的是该类别的

#文件名、训练集、测试集和验证集

result ={}#获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),第一个元素表示INPUT_DATA当前目录,

#第二个元素表示当前目录下的所有子目录,第三个元素表示当前目录下的所有的文件

sub_dirs = [x[0] for x inos.walk(INPUT_DATA)]#sub_dirs = ['./flower_data','./flower_data\\daisy','./flower_data\\dandelion',

#'./flower_data\\roses','./flower_data\\sunflowers','./flower_data\\tulips']

#每个子目录表示一类花,现在对每类花划分训练集、测试集和验证集

#sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录(各个类别的花)

for sub_dir in sub_dirs[1:]:#获取当前目录下所有的有效图片文件

extensions = ['jpg','jpeg']#把图片存放在file_list列表里

file_list =[]#os.path.basename(sub_dir)返回sub_sir最后的文件名

#如os.path.basename('./flower_data/daisy')返回daisy

dir_name =os.path.basename(sub_dir)for extension inextensions:

file_glob= os.path.join(INPUT_DATA,dir_name,'*.'+extension)#glob.glob(file_glob)获取指定目录下的所有图片,存放在file_list中

file_list.extend(glob.glob(file_glob))if not file_list: continue

#通过目录名获取类别的名称,返回将字符串中所有大写字符转换为小写后生成的字符串

label_name =dir_name.lower()#初始化当前类别的训练数据集、测试数据集和验证数据集

training_images =[]

testing_images=[]

validation_images=[]for file_name infile_list:

base_name=os.path.basename(file_name)#随机将数据分到训练数据集、测试数据集和验证数据集

#产生一个随机数,最大值为100

chance = np.random.randint(100)if chance

validation_images.append(base_name)elif chance < (testing_percentage+validation_percentage):

testing_images.append(base_name)else:

training_images.append(base_name)#将当前类别是数据放入结果字典

result[label_name]={'dir':dir_name,'training':training_images,'testing':testing_images,'validation':validation_images}#返回整理好的所有数据

returnresult

result= create_image_lists(10,30)print(result)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Python进行电影评分预测的过程主要分为以下几步: 1. 数据探索和预处理:首先需要对数据集进行探索和预处理,包括数据清洗、缺失值填充、异常值处理等。 2. 特征工程:根据数据集的特点,选择合适的特征,进行特征提取和特征转换等操作,构建适合模型训练的特征集。 3. 模型选择:选择合适的模型,比如线性回归、决策树、随机森林等,对特征集进行训练。 4. 模型评估:使用交叉验证等方法对模型进行评估,选择最优的模型。 5. 模型调优:对模型进行调优,比如调整模型参数、特征选取等,以提高模型的预测精度。 下面是具体的实现步骤: 1. 数据探索和预处理 首先,我们需要导入相关的库和数据集: ```python import pandas as pd import numpy as np # 读取数据集 df = pd.read_csv('tmdb_5000_movies.csv') ``` 接下来,我们可以对数据集进行一些基本的探索,比如查看数据集的前几行、数据集的形状、每列的数据类型等: ```python # 查看前几行 print(df.head()) # 查看数据集的形状 print(df.shape) # 查看每列的数据类型 print(df.dtypes) ``` 我们可以发现,数据集中包含了许多有用的信息,比如电影的名称、类型、上映时间、预算、票房等。但是,还存在一些缺失值等问题,需要进行处理。 接下来,我们可以对数据集进行清洗、缺失值填充等处理: ```python # 删除无用列 df = df.drop(columns=['id', 'homepage', 'tagline', 'keywords']) # 填充缺失值 df['runtime'] = df['runtime'].fillna(df['runtime'].mean()) df['revenue'] = df['revenue'].fillna(0) df['budget'] = df['budget'].fillna(0) # 将日期转换为年份 df['release_date'] = pd.to_datetime(df['release_date']) df['release_year'] = df['release_date'].dt.year # 删除缺失值较多的行 df = df.dropna() ``` 经过处理后,我们可以得到一份相对干净的数据集。 2. 特征工程 接下来,我们需要对数据集进行特征工程,构建适合模型训练的特征集。在这里,我们可以选择一些有代表性的特征,比如电影的类型、预算、票房、导演等。 ```python # 构建特征集 features = ['budget', 'genres', 'popularity', 'production_companies', 'production_countries', 'revenue', 'vote_average', 'vote_count', 'director', 'cast'] # 将特征转换为数值型 df['budget'] = pd.to_numeric(df['budget']) df['revenue'] = pd.to_numeric(df['revenue']) # 对类别型特征进行one-hot编码 df = pd.get_dummies(df, columns=['genres', 'production_companies', 'production_countries']) # 提取导演和演员特征 df['director'] = df['crew'].apply(lambda x: [i['name'] for i in eval(x) if i['job'] == 'Director'][0] if len([i['name'] for i in eval(x) if i['job'] == 'Director']) > 0 else np.nan) df['cast'] = df['cast'].apply(lambda x: [i['name'] for i in eval(x)][:5]) # 对导演和演员特征进行one-hot编码 df = pd.concat([df, pd.get_dummies(df['director'], prefix='director')], axis=1) for i in range(5): df['cast_' + str(i)] = df['cast'].apply(lambda x: x[i] if len(x) > i else np.nan) df = pd.concat([df, pd.get_dummies(df['cast_' + str(i)], prefix='cast_' + str(i))], axis=1) ``` 经过特征工程处理后,我们可以得到一个包含了各种特征的数据集。 3. 模型选择 接下来,我们需要选择合适的模型,对特征集进行训练。在这里,我们可以选择一些经典的机器学习模型,比如线性回归、决策树、随机森林等。 ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error # 划分训练集和测试集 X = df[features] y = df['vote_average'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 线性回归模型 lr = LinearRegression() lr.fit(X_train, y_train) y_pred = lr.predict(X_test) mse = mean_squared_error(y_test, y_pred) print('Linear Regression MSE:', mse) # 决策树模型 dt = DecisionTreeRegressor() dt.fit(X_train, y_train) y_pred = dt.predict(X_test) mse = mean_squared_error(y_test, y_pred) print('Decision Tree MSE:', mse) # 随机森林模型 rf = RandomForestRegressor(n_estimators=100) rf.fit(X_train, y_train) y_pred = rf.predict(X_test) mse = mean_squared_error(y_test, y_pred) print('Random Forest MSE:', mse) ``` 在这里,我们选择了线性回归、决策树和随机森林三种模型进行训练,使用均方误差(MSE)作为模型评估指标。从结果来看,随机森林模型的预测效果最好。 4. 模型评估 接下来,我们需要对模型进行评估,使用交叉验证等方法选择最优的模型。 ```python from sklearn.model_selection import KFold, cross_val_score # 交叉验证评估模型 kf = KFold(n_splits=5, shuffle=True, random_state=42) lr_scores = cross_val_score(lr, X, y, cv=kf, scoring='neg_mean_squared_error') dt_scores = cross_val_score(dt, X, y, cv=kf, scoring='neg_mean_squared_error') rf_scores = cross_val_score(rf, X, y, cv=kf, scoring='neg_mean_squared_error') # 输出交叉验证结果 print('Linear Regression CV MSE:', -np.mean(lr_scores)) print('Decision Tree CV MSE:', -np.mean(dt_scores)) print('Random Forest CV MSE:', -np.mean(rf_scores)) ``` 通过交叉验证,我们可以得到更加准确的模型评估结果。从结果来看,随机森林模型在交叉验证中表现最好。 5. 模型调优 最后,我们可以对模型进行调优,以进一步提高模型的预测精度。在这里,我们可以调整模型参数、特征选取等。 ```python from sklearn.model_selection import GridSearchCV # 调优随机森林模型 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [5, 10, 20], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4] } grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=kf, scoring='neg_mean_squared_error') grid_search.fit(X, y) print('Best Params:', grid_search.best_params_) print('Best Score:', -grid_search.best_score_) ``` 通过网格搜索等方法,我们可以找到最优的模型参数,以进一步提高模型的预测精度。 以上就是使用Python进行电影评分预测的完整流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值