不要觉得搞AI,数据科学很高大上,其实你0基础逆袭也可以。因为现在世界变了……现代技术的进步,特别是人工智能(AI)的发展,为我们提供了前所未有的便利。斯坦通过使用ChatGPT来快速启动他的机器学习之旅,向我们展示了这一点。
本文中展示了完全使用ChatGPT构建的机器学习工作流程,从上传CSV格式的数据文件(例如著名的泰坦尼克号数据集)开始,到分步高级说明,最终输出所有指标、统计数据和可视化结果。这一流程不仅涵盖了构建机器学习工作流程、创建图表和重构代码,还包括生成模拟数据集等关键任务。
ChatGPT 已经成为我日常工作中不可或缺的工具。一些常见的用例包括构建机器学习的概念验证模型、重构生产代码、学习新概念以及阅读 PDF 格式的研究论文。这样的例子不胜枚举。
如果您从事数据科学或机器学习领域的工作,ChatGPT 数据分析插件(以前称为高级数据分析(测试版))将是您最好的朋友。
将其视为初级数据科学家和机器学习工程师,非常擅长将您的想法转化为代码。它不仅可以实现代码,还可以做更多的事情。事实证明,它能够自我调试并选择最有效的解决方案。此外,如果您的代码不需要特殊的包,原型制作过程可以在 ChatGPT 网站上运行并返回结果,而无需担心依赖关系。
但是,它仍然需要您的输入(提示)来导航和质量检查结果。经过一些测试,这个插件将成为您数据科学和机器学习之旅中最强大的副驾驶。
在本文中,将演示完全使用 ChatGPT 构建的机器学习工作流程,并且零编码。
输入为:1) CSV 格式的数据文件(使用著名的泰坦尼克号数据集),2) 分步高级说明。输出是您通常在笔记本环境中收到的所有指标、统计数据和可视化结果。
一个有趣的观察是,由于 ChatGPT 对插件响应时间施加 60 秒的限制,因此该插件会自动优化其算法和超参数以加快该过程。对于实际项目,您可以根据自己的喜好调整速度和准确性的权衡。
本文涵盖的关键任务包括构建机器学习工作流程、创建图表、重构代码。
步骤1:选择数据分析并上传数据文件
第二步:通过提示探索数据分析
分类数据的单位变量分析
异常值检测
缺失数据插补
已经测试了几种方法来估算缺失数据,使用一系列提示专门解决缺失的年龄数据。已经有了一些改进。以下是交互地用于测试和检查插补方法的一系列提示的示例:
显示插补前后的年龄直方图。
叠加上面的直方图。
我不喜欢按中位数进行年龄估算;您能推荐另一种方法来估算年龄并重现直方图吗?
你能尝试一下 KNN 和 MICE 插补吗?
您能否修改 MICE 方法以使用其他色谱柱来减少尖峰?
多变量分析:
构建Xgboost分类器:
提示:将数据集随机分割成80/20的百分比;使用80%的数据训练XGBoost模型,并对剩余的20%进行预测;然后报告训练和测试的混淆矩阵。
提示:创建一个显示所用步骤的工作流程图
提示:重构整个代码,使其模块化,适合复用。
import pandas as pdimport numpy as npfrom xgboost import XGBClassifier, plot_importancefrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import f1_score, roc_curve, auc, confusion_matrix, ConfusionMatrixDisplayimport matplotlib.pyplot as pltfrom sklearn.impute import IterativeImputerfrom sklearn.preprocessing import LabelEncoder
def preprocess_data(df): # Handle missing values, drop unwanted features, and encode categorical variables df = df.copy() # Convert 'Sex' and 'Embarked' to categorical df['Sex'] = df['Sex'].astype('category') df['Embarked'] = df['Embarked'].astype('category') # Drop 'PassengerId' df.drop('PassengerId', axis=1, inplace=True) # One-hot encode categorical variables df = pd.get_dummies(df, columns=['Sex', 'Embarked']) return df
def train_model(X, y, params=None): # Initialize and train the XGBoost model if params is None: params = {'n_estimators': 100, 'max_depth': 3, 'random_state': 42, 'use_label_encoder': False, 'eval_metric': 'logloss'} model = XGBClassifier(**params) model.fit(X, y) return model
def evaluate_model(model, X, y, plot_roc=True): # Predict on the data and evaluate y_pred = model.predict(X) f1 = f1_score(y, y_pred) if plot_roc: y_probs = model.predict_proba(X)[:, 1] fpr, tpr, _ = roc_curve(y, y_probs) roc_auc = auc(fpr, tpr) plt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, label=f'AUC = {roc_auc:.2f}') plt.plot([0, 1], [0, 1], 'r--') plt.title('ROC Curve') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.legend(loc='lower right') plt.show() return f1
def display_confusion_matrix(model, X, y): # Display the confusion matrix y_pred = model.predict(X) cm = confusion_matrix(y, y_pred) disp = ConfusionMatrixDisplay(confusion_matrix=cm) disp.plot(cmap=plt.cm.Blues) plt.title('Confusion Matrix') plt.show()
# Example usage:# Load datasetdf = pd.read_csv('path_to_csv')
# Preprocess the datadf_preprocessed = preprocess_data(df)
# Split data into features and targetX = df_preprocessed.drop('Survived', axis=1)y = df_preprocessed['Survived'].astype('category') # Make sure 'Survived' is categorical
# Split data into training and testing setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train the modelmodel = train_model(X_train, y_train)
# Evaluate the modeltrain_f1 = evaluate_model(model, X_train, y_train)test_f1 = evaluate_model(model, X_test, y_test)
# Display confusion matricesdisplay_confusion_matrix(model, X_train, y_train)display_confusion_matrix(model, X_test, y_test)
领取专属 10元无门槛券
私享最新 技术干货