使用Python在机器学习中预处理数据的不同方法?

使用Python在机器学习中预处理数据的不同方法?,python,machine-learning,Python,Machine Learning,我想预处理日期并使用它来用python训练我的模型。 我的约会格式是这样的。 22-02-2026 我迄今为止开发的代码附在下面 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import warnings warnings.simplefilter(action='ignore', category=FutureWarning) df=pd.read_c

我想预处理日期并使用它来用python训练我的模型。 我的约会格式是这样的。 22-02-2026 我迄今为止开发的代码附在下面

import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import warnings warnings.simplefilter(action='ignore', category=FutureWarning) df=pd.read_csv('data.csv') df['previous_date'] = pd.to_datetime(df['previous_date']) df['current_date'] = pd.to_datetime(df['current_date']) df['previous_date_day'] = df['previous_date'].dt.day df['previous_date_month'] = df['previous_date'].dt.month df['previous_date_year'] = df['previous_date'].dt.year df['current_date_day'] = df['current_date'].dt.day df['current_date_month'] = df['current_date'].dt.month df['current_date_year'] = df['current_date'].dt.year X=df.iloc[:,3:] Y=df['value'] X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42) from sklearn import tree clf = tree.DecisionTreeClassifier() clf = clf.fit(X_train, np.ravel(y_train)) from sklearn.metrics import accuracy_score y_pred=clf.predict(X_test) acc_score=accuracy_score(y_test, y_pred)*100 print("Accuracy Score : " , acc_score)
作为pd进口熊猫 将numpy作为np导入 从sklearn.model\u选择导入列车\u测试\u拆分 进口警告 warnings.simplefilter(action='ignore',category=futurewaning) df=pd.read\u csv('data.csv')) df['previous_date']=pd.to_datetime(df['previous_date']) df['current_date']=pd.to_datetime(df['current_date']) df['previous_date_day']=df['previous_date'].dt.day df[‘上一个日期’月]=df[‘上一个日期’].dt.month df[‘上一个日期’年份]=df[‘上一个日期’].dt.year df[“当前日期”]=df[“当前日期”].dt.day df[“当前日期/月份”]=df[“当前日期/月份”].dt.month df[‘当前日期’年份]=df[‘当前日期’].dt.year X=df.iloc[:,3:] Y=df[“值”] X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,测试大小=0.2,随机状态=42) 从sklearn导入树 clf=tree.DecisionTreeClassifier() clf=clf.fit(X_系列,np.ravel(y_系列)) 从sklearn.metrics导入准确性\u分数 y_pred=clf.预测(X_检验) acc_分数=准确度_分数(y_测试,y_预测)*100 打印(“准确度分数:”,acc_分数)

根据您的评论,您需要将日期转换为序号,以便算法能够判断顺序

以下是一种方法:

导入日期时间
origin=datetime.datetime(1970,1,1)
天=(datetime.datetime.strtime('22-02-2026','%d-%m-%Y')-来源)。天
在这种情况下是
20506


我将origin设置为Unix epoch,但您可以根据自己的喜好修改它。这其实并不重要,因为这里的目的是告诉订单。大多数机器学习算法都能够使用这种格式的特征,但如果这是最佳方法,则取决于问题的性质。

由于有许多日期需要转换为数字表示,首先要确保输出列表的顺序与Lukas提到的相同。最简单的方法是将重量添加到每个单位(重量年>重量月>重量日)

现在,规范化数值很重要

import numpy as np
date_features = []
for d in list(df['date_time']):
  date_features.append(date2num(d))
date_features = np.array(date_features)
date_features_normalized = (date_features - np.min(date_features))/(np.max(date_features) - np.min(date_features))

您在帖子中的一条评论中写道:


我只想比较两个日期。如果第一个日期大于 第二次约会我想预测是真的否则我想我的预测是真的 *错。所以我的问题是我应该如何预处理数据来训练机器学习模型

这不需要机器学习,只有在if/else条件下才能解决

当事情简单的时候,你真的不需要把它复杂化

您所需要的就是:

if (first_date > second_date) 
    return True
else
    return False
或者在您的情况下:

def get_value_for_dates(row):
    if row['first_column'] > row['second_column']:
        return 1
    else:
        return 0

df['value'] = df.apply(get_value_for_dates, axis=1)

你的问题是什么?是否要将日期转换为更合适的格式?在这种情况下,使用类似于
arrow.get(“22-02-2026”).timestamp的东西。我只想比较两个日期。如果第一个日期大于第二个日期,我希望预测为真,否则我希望预测为*假。所以我的问题是我应该如何预处理数据来训练机器学习模型。我们需要更多的信息来帮助你。您的日期是单字符串变量还是在熊猫系列/数据框中?此外,向我们展示您已经尝试过的内容也是一种很好的做法。这是一个pandas数据框,包含两列previous_date和current_date,第三列是要预测的标签。您在我起草答案后编辑了问题,因此我没有看到您尝试使用pandas。你不需要把它分为日、月、年,事实上,它弊大于利。如果你把日期改成表示日期的序号就足够了(见我的答案)。
def get_value_for_dates(row):
    if row['first_column'] > row['second_column']:
        return 1
    else:
        return 0

df['value'] = df.apply(get_value_for_dates, axis=1)