一、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))
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))
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))
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)