期末大作业
一、boston房价预测
1.导入包
from sklearn.model_selection import train_test_split from sklearn.preprocessing import PolynomialFeatures import pandas as pd
2.导入数据集
from sklearn.datasets import load_boston import numpy as np
boston = load_boston()
df = pd.DataFrame(boston.data)
3 .训练集与测试集划分
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)
4.线性回归模型:建立13个变量与房价之间的预测模型,并检测模型好坏。
(1)建立模型
from sklearn.linear_model import LinearRegression lineR = LinearRegression() lineR.fit(x_train,y_train) w = lineR.coef_ b = lineR.intercept_ print("系数为:",w,"截距为:",b)
(2)检测模型好坏
from sklearn.metrics import regression y_predict = lineR.predict(x_test) #用boston数据集的数据集来验证特征(y)的预测值 # 计算模型的预测指标 print("预测的均方误差:", regression.mean_squared_error(y_test,y_predict)) print("预测的平均绝对误差:", regression.mean_absolute_error(y_test,y_predict)) # 打印模型的分数 print("模型的分数:",lineR.score(x_test, y_test))
5.多项式回归模型:建立13个变量与房价之间的预测模型,并检测模型好坏。
(1)多项式化
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) x_poly_train = poly.fit_transform(x_train) x_poly_test = poly.transform(x_test)
(2)建立模型
Lr = LinearRegression() Lr.fit(x_poly_train, y_train)
(3)预测
y_predict2 = Lr.predict(x_poly_test)
(4)检测模型好坏
print("预测的均方误差:", regression.mean_squared_error(y_test,y_predict2)) print("预测的平均绝对误差:", regression.mean_absolute_error(y_test,y_predict2))
6.比较线性模型与非线性模型的性能,并说明原因。
解:线性算法举应用训练和预测数据集的效率比较高,但最终效果对特征的依赖程度较高,需要数据在特征层面上是线性可分的。线性回归模型是一条直线,而多项式模型是一条平滑的曲线,相较之下,曲线更加贴合样本点的分布,并且误差比线性小,所以非线性模型的性能比线性模型的性能更好。
二、中文文本分类
- 导包,导入自定义词典
import os import jieba jieba.load_userdict('chinese/caijing.txt')#载入自定义词典 jieba.load_userdict('chinese/gupiao.txt') jieba.load_userdict('chinese/fangchan.txt') jieba.load_userdict('chinese/caipiao.txt')
2.定义装载文本与特征的容器
content=[]#存放文本的内容 kinds=[]#存放文本的类别
3.读取停用词表,清理空格
with open(r'chinese/stopsCN.txt', encoding='utf-8') as f: #读取停用词表 stopwords = f.read().split('\n') #清理空格等非法字符
4.清理非法字符,利用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
5.读取文本
def read_txt(path): folder_list=os.listdir(path) #遍历data下的文件名 for file in folder_list: new_path=os.path.join(path,file) #读取data文件夹的名称,放入new_path files=os.listdir(new_path)#存放data的4个文件夹 i=1 #遍历每个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)) #将processing函数处理过的文本加进content kinds.append(file) #遍历file里的特征加进kinds i+=1 #计数器
6.main函数
if __name__== '__main__': path='data' #路径为工作路径的data read_txt(path)
7.用TF-IDF算法进行单词权值的计算
(1)导包
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split
(2)TF-IDF算法
tfidf= TfidfVectorizer() x_train,x_test,y_train,y_test=train_test_split(content,kinds,test_size=0.2) #划分测试集/训练集 X_train=tfidf.fit_transform(x_train) #训练模型并转化训练集,计算权值 X_test=tfidf.transform(x_test) #利用TF-IDF算法v计算权值
8.构建贝叶斯模型
(1)导包
from sklearn.naive_bayes import MultinomialNB #用于离散特征分类,文本分类单词统计,以出现的次数作为特征值
(2)建立模型
mulp=MultinomialNB () #建立模型 mulp_NB=mulp.fit(X_train,y_train) #训练模型
(3)训练模型
y_predict=mulp.predict(X_test)
9.对模型进行预测
y_predict=mulp.predict(X_test)
10.从sklearn.metrics里导入classification_report做分类的性能报告
(1) 导包
from sklearn.metrics import classification_report
(2)输出模型预测
print('模型的准确率为:', mulp.score(X_test, y_test)) print('模型评价:\n',classification_report(y_test, y_predict))
模型结果:
模型的准确率为: 0.924384511831
模型评价:
precision recall f1-score support
彩票 0.99 0.97 0.98 1526
房产 0.97 0.84 0.90 4033
股票 0.91 0.99 0.95 30700
财经 0.95 0.69 0.80 7568
avg / total 0.93 0.92 0.92 43827