机器学习小结

提供数据的模块

import jieba as jb
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
import pandas as pd


def get_strs():
    str1 = """许嵩-天龙八部之宿敌-许嵩歌词
歌词名称:天龙八部之宿敌-许嵩
演唱歌手:许嵩
歌词专辑:2011年09月新歌速递
许嵩 - 天龙八部之宿敌
作词:许嵩      作曲:许嵩
会在何处见到你 莫非前尘已注定
飞过时空的距离 却囿于刀剑光影
三月春花渐次醒 迢迢年华谁老去
是劫是缘随我心 除了你万敌不侵
当恩怨各一半 我怎么圈揽
看灯笼血红染 寻仇已太晚
月下门童喟叹 昨夜太平长安
当天上星河转 我命已定盘
待绝笔墨痕干 宿敌已来犯
我借你的孤单 今生恐怕难还
缠扰孤岛的雪雨 飘飘洒洒谁来停
摘取一颗海上星 陪我终夜不孤寂
灵柩长埋深谷底 没有永远的秘密
染指江湖结悲局 无人逃得过宿命
当恩怨各一半 我怎么圈揽
看灯笼血红染 寻仇已太晚
月下门童喟叹 昨夜太平长安
待绝笔墨痕干 宿敌已来犯
当天上星河转 我命已定盘
我借你的孤单 今生恐怕难还
当恩怨各一半 我怎么圈揽
看灯笼血红染 寻仇已太晚
月下门童喟叹 昨夜太平长安
当天上星河转 我命已定盘
待绝笔墨痕干 宿敌已来犯
我借你的孤单 今生恐怕难还""".replace("\n", "")
    str2 = """许嵩-千百度歌词
歌词名称:千百度
演唱歌手:许嵩
歌词专辑:苏格拉没有底
专辑:苏格拉没有底
歌手:许嵩
作词:许嵩   作曲:许嵩
关外野店 烟火绝 客怎眠
寒来袖间 谁来为我 添两件
三四更雪 风不减 吹袭一夜
只是可怜 瘦马未得好歇
怅然入梦 梦几月 醒几年
往事凄艳 用情浅 两手缘
鹧鸪清怨 听得见 飞不回堂前
旧楹联红褪墨残谁来揭
我寻你千百度 日出到迟暮
一瓢江湖我沉浮
我寻你千百度 又一岁荣枯
可你从不在 灯火阑珊处
怅然入梦 梦几月 醒几年
往事凄艳 用情浅 两手缘
鹧鸪清怨 听得见 飞不回堂前
旧楹联红褪墨残谁来揭
我寻你千百度 日出到迟暮
一瓢江湖我沉浮
我寻你千百度 又一岁荣枯
可你从不在 灯火阑珊处
我寻你千百度 日出到迟暮
一瓢江湖我沉浮
我寻你千百度 又一岁荣枯
可你从不在 灯火阑珊处""".replace("\n", "")
    str3 = """许嵩-对话老师歌词
歌词名称:对话老师
演唱歌手:许嵩
歌词专辑:梦游计
对话老师 许嵩
www.mtvss.com
作词:许嵩 作曲:许嵩
在你的监督下我们前途
有没有变得更加耀祖
从你的角度 划分人之初
三六九等会不会太离谱
我不喜欢背书不代表糊涂
每个人都要选最适合自己的路
不做大人物 七十分很满足
请别对我动怒
老实说 下课前的那三分钟最难耐
不停看表多想时间能飞奔起来
我成绩又不坏 却坐在最后排
是否在你心里我已淘汰
下课后的那十分钟多愉快
躲在走廊角落约会喜欢的女孩
和她相谈甚欢 让你极度愤慨
我写检讨的文采不到写情书的一半
从你的角度 划分人之初
三六九等会不会太离谱
我不喜欢背书不代表糊涂
每个人都要选最适合自己的路
请别对我动怒
不做大人物 七十分很满足
老实说 下课前的那三分钟最难耐
不停看表多想时间能飞奔起来
我成绩又不坏 却坐在最后排
是否在你心里我已淘汰
下课后的那十分钟多愉快
躲在走廊角落约会喜欢的女孩
和她相谈甚欢 让你极度愤慨
我写检讨的文采不到写情书的一半
昨天的叛逆某天终会成熟
何必那么束缚 何不让青春自己做主
享受生命中每一个脚步 何必那么严肃
下课前的那三分钟
不停看表多想时间能飞奔起来
我成绩又不坏 却坐在最后排
是否在你心里我已淘汰
下课后的那十分钟多愉快
躲在走廊角落约会喜欢的女孩
和她相谈甚欢 让你极度愤慨
我写检讨的文采不到写情书的一半
你做学问的本领有没五柳先生一半""".replace("\n", "")

    str_1 = list(jb.cut(str1))
    str_2 = list(jb.cut(str2))
    str_3 = list(jb.cut(str3))
    con1 = " ".join(str_1)
    con2 = " ".join(str_2)
    con3 = " ".join(str_3)
    return con1, con2, con3


def get_dict():
    return [
        {"name": "gg", "age": 18},
        {"name": "ww", "age": 30},
        {"name": "dd", "age": 29},
        {"name": "cc", "age": 38}
    ]


def get_array():
    return [
        [1, 3, 1, 4],
        [0, 4, 7, 4],
        [7, 4, 0, 4],
    ]


def cut_str():
    str_list_1 = jb.cut("""各市县开放大学(电大)、化工分校,直属学院:
为充分发挥我校开放教育优秀学生的示范和引领作用,调动
学习积极性和主动性,激励学生刻苦学习、完成学业。现根据《关
于开展 2018 年度国家开放大学奖学金评选工作的通知》(国开学
〔2018〕20 号)文件精神,结合我校工作实际,决定开展我校
2018 年度国家开放大学奖学金评选工作,有关事项通知如下。""".replace("\n", ""))
    str_list_2 = jb.cut("""国家开放大学各专业在读学生(不包括“一村一名大学生计
划”试点的在读学生、残疾人教育学院的在读残疾人学生和八一
学院、空军学院的在读学生)""".replace("\n", ""))
    str_list_3 = jb.cut("""截至 2018 年 12 月 31 日,已修满本专业毕业最低学分,进
入毕业审核阶段的学生不在奖励范围之内""".replace("\n", ""))

    str_list_1 = list(str_list_1)
    str_list_2 = list(str_list_2)
    str_list_3 = list(str_list_3)
    con1 = " ".join(str_list_1)
    con2 = " ".join(str_list_2)
    con3 = " ".join(str_list_3)
    return con1, con2, con3


def get_data_can_dimension():
    data = [
        [1, 2, 3, 2, 5],
        [1, 3, 23, 33, 12],
        [1, 2, 13, 4, 23],
        [1, 3, 4, 34, 43],
        [1, 3, 67, 8, 45],
        [1, 2, 4, 92, 65],
    ]
    return data


def get_text_list():
    str = """许嵩-对话老师歌词
    歌词名称:对话老师
    演唱歌手:许嵩
    歌词专辑:梦游计
    对话老师 许嵩
    www.mtvss.com
    作词:许嵩 作曲:许嵩
    在你的监督下我们前途
    有没有变得更加耀祖
    从你的角度 划分人之初
    三六九等会不会太离谱
    我不喜欢背书不代表糊涂
    每个人都要选最适合自己的路
    不做大人物 七十分很满足
    请别对我动怒
    老实说 下课前的那三分钟最难耐
    不停看表多想时间能飞奔起来
    我成绩又不坏 却坐在最后排
    是否在你心里我已淘汰
    下课后的那十分钟多愉快
    躲在走廊角落约会喜欢的女孩
    和她相谈甚欢 让你极度愤慨
    我写检讨的文采不到写情书的一半
    从你的角度 划分人之初
    三六九等会不会太离谱
    我不喜欢背书不代表糊涂
    每个人都要选最适合自己的路
    请别对我动怒
    不做大人物 七十分很满足
    老实说 下课前的那三分钟最难耐
    不停看表多想时间能飞奔起来
    我成绩又不坏 却坐在最后排
    是否在你心里我已淘汰
    下课后的那十分钟多愉快
    躲在走廊角落约会喜欢的女孩
    和她相谈甚欢 让你极度愤慨
    我写检讨的文采不到写情书的一半
    昨天的叛逆某天终会成熟
    何必那么束缚 何不让青春自己做主
    享受生命中每一个脚步 何必那么严肃
    下课前的那三分钟
    不停看表多想时间能飞奔起来
    我成绩又不坏 却坐在最后排
    是否在你心里我已淘汰
    下课后的那十分钟多愉快
    躲在走廊角落约会喜欢的女孩
    和她相谈甚欢 让你极度愤慨
    我写检讨的文采不到写情书的一半
    你做学问的本领有没五柳先生一半""".replace("\n", "").replace(",", "")
    str_list = list(set(list(jb.cut(str))))
    return str_list


def get_taitan():
    path_url = "http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt"
    taitan = pd.read_csv(path_url)
    taitan.to_dict()
    x = taitan[["pclass", "age", "sex"]]
    y = taitan[["survived"]]
    x["age"].fillna(value=x["age"].mean(), inplace=True)
    x_tarin, x_test, y_train, y_test = train_test_split(x, y)
    dc = DictVectorizer()
    x_tarin = dc.fit_transform(x_tarin.to_dict(orient="records"))
    x_test = dc.fit_transform(x_test.to_dict(orient="records"))
    return x_tarin, x_test, y_train, y_test

demo

from sklearn.preprocessing import MinMaxScaler
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.feature_extraction import DictVectorizer
from sklearn.decomposition import PCA
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LogisticRegression
import numpy as np
import get_str as g


def ss():
    """标准化处理一个二维数组"""
    ss = StandardScaler()
    data = ss.fit_transform(g.get_array())
    print(data)


def mm():
    """归一化处理一个二维数组"""
    mm = MinMaxScaler()
    data = mm.fit_transform(g.get_array())
    print(data)


def tf_boys():
    """文本特征处理三篇文章,用TfidfVectorizer"""
    tf = TfidfVectorizer()
    data = tf.fit_transform(g.get_strs())
    print(data)


def cv_boys():
    """文本特征处理三篇文章,用CountVectorizer"""
    cv = CountVectorizer()
    data = cv.fit_transform(g.get_strs())
    print(data)


def deal_dict():
    """处理一个字典,把字典中的数据转化为数组,供计算机使用"""
    d = DictVectorizer()
    data = d.fit_transform(g.get_dict())
    print(data)


def pca():
    """主成分分析"""
    pca = PCA()
    data = pca.fit_transform(g.get_data_can_dimension())
    print(data)


def var():
    """数据根据方差进行筛选"""
    var = VarianceThreshold()
    data = var.fit_transform(g.get_data_can_dimension())
    print(data)


def split_data():
    """数据分割"""
    li = load_iris()
    x_train, x_test, y_train, y_test = train_test_split(li.data, li.target, test_size=0.25)
    return x_train, x_test, y_train, y_test, li.target_names


def k_neibours():
    """k临近算法"""
    knn = KNeighborsClassifier(n_neighbors=2)
    x_train, x_test, y_train, y_test, target_names = split_data()
    knn.fit(x_train, y_train)
    score = knn.score(x_test, y_test)
    print(score)


def nb():
    """朴素贝叶斯"""
    mnb = MultinomialNB(alpha=1.0)
    x_train, x_test, y_train, y_test, target_names = split_data()
    mnb.fit(x_train, y_train)
    score = mnb.score(x_test, y_test)
    print(score)


def classification_report_fuc():
    """精确率和召回率"""
    knn = KNeighborsClassifier(n_neighbors=2)
    x_train, x_test, y_train, y_test, target_names = split_data()
    knn.fit(x_train, y_train)
    predict = knn.predict(x_test)
    str = classification_report(y_test, predict, target_names=target_names)
    print(str)


def tree():
    """决策树"""
    x_tarin, x_test, y_train, y_test = g.get_taitan()
    des = DecisionTreeClassifier()
    des.fit(x_tarin, y_train)
    score = des.score(x_test, y_test)

    print("分数", score)


def trees():
    """随机森林(优化)"""
    x_tarin, x_test, y_train, y_test = g.get_taitan()
    rf = RandomForestClassifier()
    param = {"n_estimators": [120, 200, 300, 500, 800, 1200], "max_depth": [5, 8, 15, 25, 30]}
    gc = GridSearchCV(rf, param_grid=param, cv=2)
    gc.fit(x_tarin, y_train)
    score = gc.score(x_test, y_test)
    print(score)
    print(gc.best_params_)


def linear():
    """线性回归"""
    lb = load_boston()
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)

    x_stand = StandardScaler()
    y_stand = StandardScaler()

    x_train = x_stand.fit_transform(x_train)
    x_test = x_stand.fit_transform(x_test)

    y_train = y_stand.fit_transform(y_train.reshape(-1, 1))
    y_test = y_stand.fit_transform(y_test.reshape(-1, 1))

    lr = LinearRegression()
    lr.fit(x_train, y_train)

    y_predict = y_stand.inverse_transform(lr.predict(x_test))
    score = mean_squared_error(y_stand.inverse_transform(y_test), y_predict)
    print("linear_1:", score)
    print("linear_2:", lr.coef_)


def sgd():
    """梯度下降的线性回归"""
    lb = load_boston()
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)

    x_stand = StandardScaler()
    y_stand = StandardScaler()

    x_train = x_stand.fit_transform(x_train)
    x_test = x_stand.fit_transform(x_test)

    y_train = y_stand.fit_transform(y_train.reshape(-1, 1))
    y_test = y_stand.fit_transform(y_test.reshape(-1, 1))

    sgd = SGDRegressor()
    sgd.fit(x_train, y_train)
    # sgd = LinearRegression()
    # sgd.fit(x_train, y_train)
    y_predict = y_stand.inverse_transform(sgd.predict(x_test))
    score = mean_squared_error(y_stand.inverse_transform(y_test), y_predict)
    print("sgd_1:", score)
    print("sgd_2:", sgd.coef_)


def ridge():
    """岭回归
    适合病态数据多
    """
    lb = load_boston()
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)

    x_stand = StandardScaler()
    y_stand = StandardScaler()

    x_train = x_stand.fit_transform(x_train)
    x_test = x_stand.fit_transform(x_test)

    y_train = y_stand.fit_transform(y_train.reshape(-1, 1))
    y_test = y_stand.fit_transform(y_test.reshape(-1, 1))

    rd = Ridge()
    rd.fit(x_train, y_train)

    y_predict = y_stand.inverse_transform(rd.predict(x_test))
    score = mean_squared_error(y_stand.inverse_transform(y_test), y_predict)
    print("rd_1:", score)
    print("rd_2:", rd.coef_)


def log():
    """逻辑回归"""
    data = g.get_zhongliu()
    data = data.replace(to_replace="?", value=np.nan)
    data = data.dropna()
    x_train, x_test, y_train, y_test = train_test_split(data.iloc[:, 1:-2], data.iloc[:, -1], test_size=0.25)
    log = LogisticRegression()
    log.fit(x_train, y_train)
    score = log.score(x_test, y_test)
    print(score)
    predict = log.predict(x_test)
    str = classification_report(y_test, predict, labels=[2, 4], target_names=["良性", "恶性"])
    print(str)


if __name__ == '__main__':
    ss()
    mm()
    tf_boys()
    cv_boys()
    deal_dict()
    pca()
    var()
    split_data()
    k_neibours()
    nb()
    classification_report_fuc()
    tree()
    trees()
    linear()
    sgd()
    ridge()
    log()
发布了75 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_40387150/article/details/89788834