机器学习基础第一天(文本特征抽取与数据预处理)

    科技2025-05-16  8

    机器学习基础第一天(文本特征抽取与数据预处理)

    文本特征抽取以及中文问题

    from sklearn.feature_extraction import DictVectorizer from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer import jieba import numpy as np # jieba 分解中文函数 def cutword(): con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。") con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。") con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。") # 转换成列表 content1 = list(con1) content2 = list(con2) content3 = list(con3) # 把列表转换成字符串 c1 = ' '.join(content1) c2 = ' '.join(content2) c3 = ' '.join(content3) return c1, c2, c3 # 定义函数, # def hanzivec(): # """ # 中文特征值化 # :return: None # """ # c1, c2, c3 = cutword() # print(c1, c2, c3) # 实例化 # cv = CountVectorizer() # data = cv.fit_transform([c1, c2, c3]) # print(data) # print(cv.get_feature_names()) # print(data.toarray()) # return None # if __name__ == "__main__": # hanzivec() def tfidfvec(): """ 中文特征值化 :return: None """ c1, c2, c3 = cutword() print(c1, c2, c3) tf = TfidfVectorizer() data = tf.fit_transform([c1, c2, c3]) print(tf.get_feature_names()) print(data.toarray()) return None if __name__ == "__main__": tfidfvec()

    结果展示:

    今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。 ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样'] [[0. 0. 0.21821789 0. 0. 0. 0.43643578 0. 0. 0. 0. 0. 0.21821789 0. 0.21821789 0. 0. 0. 0. 0.21821789 0.21821789 0. 0.43643578 0. 0.21821789 0. 0.43643578 0.21821789 0. 0. 0. 0.21821789 0.21821789 0. 0. 0. ] [0. 0. 0. 0.2410822 0. 0. 0. 0.2410822 0.2410822 0.2410822 0. 0. 0. 0. 0. 0. 0. 0.2410822 0.55004769 0. 0. 0. 0. 0.2410822 0. 0. 0. 0. 0.48216441 0. 0. 0. 0. 0. 0.2410822 0.2410822 ] [0.15698297 0.15698297 0. 0. 0.62793188 0.47094891 0. 0. 0. 0. 0.15698297 0.15698297 0. 0.15698297 0. 0.15698297 0.15698297 0. 0.1193896 0. 0. 0.15698297 0. 0. 0. 0.15698297 0. 0. 0. 0.31396594 0.15698297 0. 0. 0.15698297 0. 0. ]]

    数据特征预处理

    from sklearn.preprocessing import MinMaxScaler, StandardScaler import numpy as np # 导入simpleimputer处理缺失值 from sklearn.impute import SimpleImputer from sklearn.feature_selection import VarianceThreshold import sklearn from sklearn.decomposition import PCA print(sklearn.__version__)#版本查询 def mm(): """ 归一化处理; :return: NOne """ # (feature_range=(0, 1))设定归一化参数区间,注意归一化只针对数组 mm = MinMaxScaler(feature_range=(0, 1)) data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]]) print(data) return None def stand(): """ 标准化缩放,与平均数之差比上标准差 :return: """ std = StandardScaler() data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]]) print(data) return None def im(): """ 缺失值处理 :return:NOne """ # NaN, nan,参数axis变为verbose im = SimpleImputer(missing_values=np.nan, strategy='mean',verbose=0) data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]]) print(data) return None def var(): """ 特征选择-删除低方差的特征 :return: None """ # 删除低方差特征 var = VarianceThreshold(threshold=1.0) data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]) print(data) return None def pca(): """ 主成分分析进行特征降维,参数n_components保留90%的信息 :return: None """ pca = PCA(n_components=0.9) data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]]) print(data) return None if __name__ == "__main__": mm() stand() im() var() pca()

    结果展示:

    0.23.2 [[1. 0. 0. 0. ] [0. 1. 1. 0.83333333] [0.5 0.5 0.6 1. ]] [[-1.06904497 -1.35873244 0.98058068] [-0.26726124 0.33968311 0.39223227] [ 1.33630621 1.01904933 -1.37281295]] [[1. 2.] [4. 3.] [7. 6.]] [[0] [4] [1]] [[ 1.28620952e-15 3.82970843e+00] [ 5.74456265e+00 -1.91485422e+00] [-5.74456265e+00 -1.91485422e+00]]
    Processed: 0.010, SQL: 8