期末大作业

一、boston房价预测

1. 读取数据集

from sklearn.datasets import load_boston
boston = load_boston()
boston.keys()

  

2. 训练集与测试集划分

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(boston.data,boston.target,test_size=0.3)

  

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

from sklearn.linear_model import LinearRegression
LR = LinearRegression()
LR.fit(x_train,y_train)
a = LR.coef_
b = LR.intercept_
print("系数为:",a,"截距为:",b)

 

检测模型好坏

from sklearn.metrics import regression
x_predict = LR.predict(x_test)     

print("预测的均方误差:", regression.mean_squared_error(x_predict,y_test))
print("预测的平均绝对误差:", regression.mean_absolute_error(x_predict,y_test))
print("模型的分数:",LR.score(x_test, y_test))

  期末大作业_第1张图片

 

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

from sklearn.preprocessing import PolynomialFeatures  # 多项式化处理
poly = PolynomialFeatures(degree=2)  
x_poly_train = poly.fit_transform(x_train)
x_poly_test = poly.transform(x_test)

LR = LinearRegression()     # 建立模型
LR.fit(x_poly_train, y_train)

  

x_pred = LR.predict(x_poly_test) 
print("预测的均方误差:", regression.mean_squared_error(x_pred,y_test))
print("预测的平均绝对误差:", regression.mean_absolute_error(x_pred,y_test))
print("模型的分数:",LR.score(x_poly_test, y_test))

  期末大作业_第2张图片

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

非线性模型的性能比较好,因为非线性模型(即多项式回归模型)的曲线比线性模型直线更能适合分布状况,而且从上述分析可知多项式回归的误差跟线性回归误差相比较小。

二、中文文本分类

1.各种获取文件,写文件

import os
import jieba

#加载数据
path = r'E:\data\data'

#加载停用词库
with open(r'e:\\stopsCN.txt', encoding='utf-8') as f:
    stopwords = f.read().split('\n')
label=[]
content=[]

  

2.去掉符号,整体规范化;使用jieba分词将中文文本切割;去掉停用词。。

#使用jieba分词将中文文本切割
def processing(texts):
    # 去掉非法的字符
    texts = "".join([char for char in texts if char.isalpha()])
    # 用jieba分词
    texts = [text for text in jieba.cut(texts, cut_all=True) if len(text) >= 2]
    # 去掉停用词
    texts = " ".join([text for text in texts if text not in stopwords])
    return texts

  

3.遍历每个个文件夹下的每个文本文件。

def read_txt(path):
    folder_list = os.listdir(path)  # 遍历data下的文件名
    for file in folder_list:
        new_path = os.path.join(path, file)  # 读取文件夹的名称,生成新的路径
        files = os.listdir(new_path)  # 存放文件的内容
        
        # 遍历每个txt文件
        for f in files: 
            with open(os.path.join(new_path, f), 'r', encoding='UTF-8')as f:  # 打开txt文件
                temp_file = f.read()
            content.append(processing(temp_file))
            label.append(file)
if __name__ == '__main__':    
    read_txt(path)
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(content, label, test_size=0.2)

  

4.对处理之后的文本开始用TF-IDF算法进行单词权值的计算

#TF-IDF算法进行单词权值的计算,提取文本特征
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
X_train = tfidf.fit_transform(x_train)
X_test = tfidf.transform(x_test)

  

5.贝叶斯预测种类

# 构建贝叶斯模型
from sklearn.naive_bayes import MultinomialNB  # 用于离散特征分类,文本分类单词统计,以出现的次数作为特征值
mulp = MultinomialNB()
mulp_NB = mulp.fit(X_train, y_train)

# 对模型进行预测
y_predict = mulp.predict(X_test)  

6.模型评价

# 从sklearn.metrics里导入classification_report做分类的性能报告
from sklearn.metrics import classification_report
from sklearn.model_selection import cross_val_score
print('模型的准确率为:', mulp.score(X_test, y_test))
print('classification_report:\n', classification_report(y_test, y_predict))

期末大作业_第3张图片

7.新文本类别预测

import collections
# 统计测试集和预测集的各类新闻个数
y_test_Count = collections.Counter(y_test)
y_predict_Count = collections.Counter(y_predict)
print('实际:',y_test_Count,'\n', '预测:', y_predict_Count)

  

你可能感兴趣的:(期末大作业)