Python实现多组机器学习数据集划分技巧

需积分: 14 5 下载量 183 浏览量 更新于2024-11-02 1 收藏 2KB 7Z 举报
资源摘要信息:"data_sort.7z是一个压缩文件,内含与机器学习相关的Python脚本,通过该脚本可以实现多种数据集划分方法。描述中提到的留出法、k折交叉验证法、自助法是数据集划分的三种常用方法,它们各自有不同的应用场景和优缺点。留出法简单直接,但可能导致训练集和测试集分布不均;k折交叉验证法能更充分地利用数据进行模型评估,但计算成本相对较高;自助法是一种重采样方法,通过有放回的抽样来减少数据的偏差,但可能会引入更多的随机性。通过运行data_sort.7z中的文件,用户可以一次性生成多组不同的训练集和测试集,这对于机器学习模型的训练和验证过程非常重要,可以帮助研究人员验证模型的稳定性和泛化能力。标签中提到的机器学习、Python、自助法、留出法、k折交叉验证法,都是数据科学领域中的关键知识点。" 知识点详细说明: 1. Python编程语言 Python是一种广泛应用于科学计算、数据分析、人工智能领域的高级编程语言。它的语法简洁明了,拥有丰富的库支持,是实现数据科学相关算法的理想选择。 2. 机器学习 机器学习是一种通过训练计算机算法自动识别数据模式并做出预测的计算技术。它允许计算机系统利用从数据中获得的知识,通过算法对未知数据进行准确预测或决策。 3. 留出法(Holdout Method) 留出法是一种划分数据集的简单方法,通常是随机地将数据分为两个不相交的子集:训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。留出法的一个主要缺点是可能会因为数据划分的不同而导致结果的不稳定。 4. k折交叉验证法(k-fold Cross-Validation) k折交叉验证是一种将全部数据集分为k个大小相似的互斥子集,在k-1个子集上训练模型,在剩下的一个子集上进行验证,重复k次,每次选择不同的子集作为测试集。这种方法可以更充分地利用有限的数据资源,并且有助于评估模型在未见数据上的泛化能力。 5. 自助法(Bootstrap) 自助法是一种统计学上的重采样技术,它通过有放回地从原始数据集中抽取样本来构造多个不同的训练集。每个训练集可能包含重复的样本,而未被抽中的样本则构成了相应的测试集。自助法的一个优点是它能够减少偏差,使得模型评估更加稳定,但它也可能会增加方差,影响评估的准确性。 6. 数据集划分 数据集划分是机器学习中非常重要的一步,它涉及到将原始数据集分为训练集和测试集的过程。正确的数据集划分能够帮助研究人员更好地评估和选择模型。数据集划分方法的选择取决于数据集的大小、特征和应用场景。 7. Python数据科学库 为了实现上述的数据集划分方法,Python提供了一些强大的数据科学库,如NumPy、pandas、scikit-learn等。这些库能够方便地对数据进行操作和处理,实现高效的数据集划分。 8. 模型评估 模型评估是机器学习中的一个关键步骤,它涉及到使用不同的指标和方法来衡量模型的性能。留出法、k折交叉验证法和自助法都是模型评估中常用的策略,它们各有优势,选择合适的评估方法可以有效地指导模型的训练和改进。 通过理解和掌握上述知识点,研究人员可以更加科学地处理和划分数据集,合理评估机器学习模型,从而在数据分析和人工智能领域取得更好的成果。

import pandas as pd import matplotlib import numpy as np import matplotlib.pyplot as plt import jieba as jb import re from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.feature_selection import chi2 import numpy as np from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.naive_bayes import MultinomialNB def sigmoid(x): return 1 / (1 + np.exp(-x)) import numpy as np #定义删除除字母,数字,汉字以外的所有符号的函数 def remove_punctuation(line): line = str(line) if line.strip()=='': return '' rule = re.compile(u"[^a-zA-Z0-9\u4E00-\u9FA5]") line = rule.sub('',line) return line def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()] return stopwords df = pd.read_csv('./online_shopping_10_cats/online_shopping_10_cats.csv') df=df[['cat','review']] df = df[pd.notnull(df['review'])] d = {'cat':df['cat'].value_counts().index, 'count': df['cat'].value_counts()} df_cat = pd.DataFrame(data=d).reset_index(drop=True) df['cat_id'] = df['cat'].factorize()[0] cat_id_df = df[['cat', 'cat_id']].drop_duplicates().sort_values('cat_id').reset_index(drop=True) cat_to_id = dict(cat_id_df.values) id_to_cat = dict(cat_id_df[['cat_id', 'cat']].values) #加载停用词 stopwords = stopwordslist("./online_shopping_10_cats/chineseStopWords.txt") #删除除字母,数字,汉字以外的所有符号 df['clean_review'] = df['review'].apply(remove_punctuation) #分词,并过滤停用词 df['cut_review'] = df['clean_review'].apply(lambda x: " ".join([w for w in list(jb.cut(x)) if w not in stopwords])) tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2)) features = tfidf.fit_transform(df.cut_review) labels = df.cat_id X_train, X_test, y_train, y_test = train_test_split(df['cut_review'], df['cat_id'], random_state = 0) count_vect = CountVectorizer() X_train_counts = count_vect.fit_transform(X_train) tfidf_transformer = TfidfTransformer() X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 已经写好以上代码,请补全train和test函数

2023-06-01 上传
2023-05-28 上传