• 期末大作业


    一、boston房价预测

    1. 读取数据集

    2. 训练集与测试集划分

    3. 线性回归模型:建立13个变量与房价之间的预测模型,并检测模型好坏。

    4. 多项式回归模型:建立13个变量与房价之间的预测模型,并检测模型好坏。

    from sklearn.datasets import load_boston  #导入Boston房价数据集
    boston = load_boston()   #读取数据集
    # boston.keys()    #查看key值
    x = boston.data
    y = boston.target
    
    #训练集与测试集划分
    from sklearn.cross_validation import train_test_split     
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0)
    #其中 test_size是样本占比,如果是整数的话就是样本的数量;
    #random_state是随机数的种子,不同的种子会造成不同的随机采样结果,相同的种子采样结果相同。
    print(x_train.shape,y_train.shape)
    
    #建立一元线性回归模型
    from sklearn.linear_model import LinearRegression
    lr = LinearRegression()
    lr.fit(x_train,y_train)
    lr.coef_    #系数
    lr.intercept_   #截距
    
    
    #检测模型好坏
    from sklearn.metrics import regression
    y_pred = lr.predict(x_test)   #预测
    n = regression.mean_squared_error(y_test,y_pred) #预测模型均方误差
    print("线性回归均方误差:",n)
    a = regression.mean_absolute_error(y_test,y_pred)
    print("线性回归平均绝对误差",a)
    s = lr.score(x_test,y_test)  #模型分数
    print("线性回归模型分数:",s)
    
    
    #多元多项式回归模型
    from sklearn.preprocessing import PolynomialFeatures
    poly= PolynomialFeatures(degree=2)
    x_poly_train= poly.fit_transform(x_train) #多项式化
    x_poly_test  = poly.transform(x_test)
    
    #建立模型
    lr2 = LinearRegression()
    lr2.fit(x_poly_train,y_train)
    
    #预测
    y_pred2 = lr2.predict(x_poly_test)
    
    #检测模型好坏,计算模型的预测指标
    n2 = regression.mean_squared_error(y_test,y_pred2)
    print("多项式回归均方误差:",n2)
    a2 = regression.mean_absolute_error(y_test,y_pred2)
    print("多项式回归平均绝对误差",a2)
    s2 = lr2.score(x_poly_test,y_test)
    print("多项式回归模型分数:",s2)

    # 用一元线性回归拟合观察效果
    lr2 = LinearRegression()
    lr2.fit(x,y_train)
    # 建立多项式模型
    from sklearn.preprocessing import PolynomialFeatures
    # 多项式化x
    x = x_train[:,12].reshape(-1,1)
    poly= PolynomialFeatures(degree=2)
    x_poly = poly.fit_transform(x)
    
    # 用多项式后的x建立多项式回归模型
    lrp = LinearRegression()
    lrp.fit(x_poly,y_train)
    
    # 预测
    x_poly2 = poly.transform(x_test[:, 12].reshape(-1,1))
    y_ploy_predict = lrp.predict(x_poly2)
    
    # 图形化,将元数据,一元拟合,多元拟合进行绘图观察
    plt.scatter(x_test[:,12], y_test)
    plt.plot(x, lr2.coef_* x + lr2.intercept_, 'g')
    plt.scatter(x_test[:,12], y_ploy_predict, c='r')
    plt.show()

    5、比较线性模型与非线性模型的性能,并说明原因。

      如上图可知,非线性模型的性能比较好,因为非线性模型(即多项式回归模型)的曲线比线性模型直线更能契合人口密度与房屋样本的分布状况,而且从上述分析可知多项式回归的误差跟线性回归误差相比较小。

    二、中文文本分类

    import os
    import numpy as np
    import sys
    from datetime import datetime
    import gc
    path = 'E:\大三\数据挖掘\qimo\0369'
    
    # 导入结巴库,并将需要用到的词库加进字典
    import jieba
    # 导入停用词:
    with open(r'E:大三数据挖掘qimostopsCN.txt', encoding='utf-8') as f:
        stopwords = f.read().split('
    ')
    
    #预处理数据,先定义一个函数,然后封装
    def processing(tokens):
        # 去掉非字母汉字的字符,isalpha判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。
        tokens = "".join([char for char in tokens if char.isalpha()])
        # 结巴分词,砍掉大于等于2个以上的词,(即将一句话拆分为各个词语)
        tokens = [token for token in jieba.cut(tokens,cut_all=True) if len(token) >=2]
        # 去掉停用词
        tokens = " ".join([token for token in tokens if token not in stopwords])
        return tokens
    
    tokenList = []
    targetList = []
    # 用os.walk获取需要的变量,并拼接文件路径再打开每一个文件
    for root,dirs,files in os.walk(path):
        for f in files:
    #     print(root)    #当前目录路径
    #     print(dirs)    #当前路径下所有子目录
    #     print(files)   #当前路径下所有非目录子文件
            filePath = os.path.join(root,f)
            with open(filePath, encoding='utf-8') as f:
                content = f.read()     #存放读取的数据
                # 获取新闻类别标签,并处理该新闻
            target = filePath.split('\')[-2]
            targetList.append(target)            #获取的新闻文本的类别,追加到targetList里
            tokenList.append(processing(content))   #获取的各新闻文本里的详细内容,预处理后追加到tokenList
    
    import pandas
    datas = pandas.DataFrame({
        'targetList': targetList,
        'tokenList':  tokenList
    })
    print(datas)

    #划分训练集测试集并建立特征向量,为建立模型做准备
    #划分训练集、测试集
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test= train_test_split(tokenList,targetList,test_size=0.3,stratify=targetList)
    
    #转化为特征向量。
    from sklearn.feature_extraction.text import TfidfVectorizer
    vec = TfidfVectorizer()
    x_train = vec.fit_transform(x_train)
    x_test = vec.transform(x_test)
    
    #建立模型,因为样本特征的a分布大部分是多元离散值,所以用多项式朴素贝叶斯
    from sklearn.naive_bayes import GaussianNB,MultinomialNB
    mnb = MultinomialNB()
    module = mnb.fit(x_train,y_train)
    
    #进行预测
    y_pred = module.predict(x_test)
    
    #输出模型精确度
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(mnb,x_test,y_test,cv=5)   
    print("精确度:%.3f"%scores.mean())
    #输出模型评估报告,
    from sklearn.metrics import classification_report
    print("分类报告:
    ",classification_report(y_pred,y_test))

    #将预测结果和实际结果进行对比
    import collections
    import matplotlib.pyplot as plt
    from pylab import mpl
    
    # mpl.rcParams['font.sans-serif'] = ['FangSong']  #指定默认仿宋字体
    # mpl.reParams['axes.unicode_minus'] = False     #解决保存图像是负号‘-’显示为方块的问题、
    
    mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体  
    mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
    
    #统计测试集和预测集的各类新闻文本个数
    testCount = collections.Counter(y_test)
    predCount = collections.Counter(y_pred)
    print('实际:',testCount)
    print('预测:',predCount)
    
    #建立标签列表,实际结果列表和预测结果列表
    nameList = list(testCount.keys())
    testList = list(testCount.values())
    predList = list(predCount.values())
    x = list(range(len(nameList)))
    print("类别:",nameList)
    print("实际:",testList)
    print("预测:",predList)

  • 相关阅读:
    Mysql备份工具xtraback全量和增量测试
    Linux进程管理四大工具ps dstat top htop
    Linux Netcat 命令——网络工具中的瑞士军刀
    Linux 下载工具 aria2
    C语言宏基础总结
    使用浏览器做编辑器
    设计模式(1)
    OpenGL 编程(1)
    使用ffmpeg推流
    FFMPEG 解码和编码(编码mjpeg)
  • 原文地址:https://www.cnblogs.com/Tlzlykc/p/10131831.html
Copyright © 2020-2023  润新知