1、22.625.625.926.322.521.721.425.824.9假设正应力是精确的,求抗剪强度与正应力的线性回归方程 当正应力为24.5pa时,抗剪强度的估计值?程序及运行结果:for i=0X=26.8 25.4 23.6 27.7 23.9 24.7 28.1 26.9 27.4 22.6 25.6; Y=26.5 27.3 27.1 23.6 25.9 26.3 22.5 21.7 21.4 25.8 24.9; N=length(X); lxx=sum(X.*X)-sum(X).2./N; lxy=sum(X.*Y)-sum(X).*sum(Y)/N; b=lxy./lxx;
2、b0=mean(Y)-b.*mean(X); x=(21:0.01:31); y=b.*x+b0; plot(X,Y,b*,x,y,r-)end实验结果:lxx= 43.0467lxy= -29.5333b= -0.6861b0=42.5818材料的抗剪强度与材料承受的正应力关系为:y=42.5818-0.6861x实验内容及程序结果(二)(2)下表给出在不同质量下弹簧长度的观测值(设质量的观测值无误差):质量/g51015202530长度/cm7.258.128.959.9010.911.8 做散点图,观察质量与长度之间是否呈线性关系;求弹簧的刚性系数和自由状态下的长度。X=5 10 15
3、20 25 30;Y=7.25 8.12 8.95 9.90 10.9 11.8;N=length(X);lxy=sum(X.*Y)-sum(X).*sum(Y)./N;lxx=sum(X.*X)-(sum(X).2)./N;b=lxy./lxx;b0=mean(Y)-b.*mean(X);x=(5:30);y=b.*x+b0;plot(X,Y,以刚性系数k=b=0.1831,自由长度x0=b0=6.2827四、实验小结一元回归是处理两个变量之间的关系,即两个变量x和y之间若存在一定的关系,则可通过实验的方法,分析所得数据,找出两者之间关系的经验公式。假如两个变量之间的关系是线性的就称为一元线
4、性回归,这就是工程上和科研中场遇到的直线拟合问题。Java实现k-means1.数据来源描述本数据集中一共包含600组数据,每一组数据都有60个分量,也就是数据是60维的。数据一共可以分成6个聚类,分别是:1-100 Normal (正常)101-200 Cyclic (循环)201-300 Increasing trend (增加趋势)301-400 Decreasing trend (减少趋势)401-500 Upward shift (上升变化)501-600 Downward shift (下降变化)2.数据预处理由于本数据集的数据维数较多,所以本实验采用了结构体来存储60维的数据,并
5、使用指针来进行对数据的操作,以提高速度。在数据预处理过程中,首先将数据从data文件中读出,后依次存入结构体数组dataset600中。3.k-means聚类算法 k-means 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各
6、聚类中心的值,直至得到最好的聚类结果。(1)算法思路:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然 后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。(2)算法步骤:step.1-初始化距离K个聚类的质心(随机产生)step.2-计
7、算所有数据样本与每个质心的欧氏距离,将数据样本加入与其欧氏距离最短的那个质心的簇中(记录其数据样本的编号)step.3-计算现在每个簇的质心,进行更新,判断新质心是否与原质心相等,若相等,则迭代结束,若不相等,回到step2继续迭代。4.数据挖掘实现的源代码/111060850.cpp KMeans聚类算法/ #include stdafx.h#includemath.hstdlib.hstringfstreamtime.husing namespace std;const int N=36000; /数据个数const int D=60; /数据维度struct DataSet /用来存储数
8、据的结构体 double argD;const int K=6; /集合个数int *CenterIndex; /质心索引集合/struct DataSet *Center; /质心集合/struct DataSet *CenterCopy;DataSet CenterK; /保存现在的质心DataSet CenterCopyK; /保存上一次迭代中的质心/double *DataSet;int Cluster6N/D; /保存每个簇包含的数据的索引值int *Top;ifstream fin;char ch;string fDataSetN/DD;/*算法描述:kmeans聚类算法采用的是给
9、定类的个数K,将N个元素(对象)分配到K个类中去使得类内对象之间的相似性最大,而类之间的相似性最小 */数据存储在结构体中/函数声明部分void InitData(struct DataSet* dataset);/对数据集进行初始化,从文件中将其读取出后转化为double型依次存入结构体中void InitCenter(struct DataSet* dataset);/初始化质心void CreateRandomArray(int n,int k,int *centerIndex);/随机产生一组索引值,用于初始化质心void CopyCenter(struct DataSet* data
10、set);/复制保存上一次迭代的质心void UpdateCluster(struct DataSet* dataset);/更新簇void UpdateCenter(struct DataSet* dataset);/更新质心int GetIndex(struct DataSet* dataset,struct DataSet* centerIndex);/本程序的核心,计算每一数据元素属于哪一个聚类,并返回其索引值void AddtoCluster(int index,int value);/根据索引值将数据元素的索引加入到簇之中void print(struct DataSet* dat
11、aset);bool IsEqual(struct DataSet* value1,struct DataSet* value2);/判断现有质心和上一次迭代的质心是否相等double DoubletoString(const char* str);/string转化为double型的函数double Euclidean(struct DataSet* value1,struct DataSet* value2);/计算欧几里得距离函数int main(int argc, char* argv) int Flag=1; double ttime=0,start=0,end=0; start=c
12、lock(); DataSet datasetN/D; InitData(dataset); /* for(int i=0;iN/D;i+) for(int j=0;jD;j+) coutdataseti.argjch; fDataSetij=fDataSetij+ch; dataseti.argj=DoubletoString(fDataSetij.c_str(); while(fin.peek()=|fin.peek()=) fin.get(); fin.close(); cout数据已读入 InitCenter(dataset);void InitCenter(struct DataSe
13、t* dataset) int i=0; /产生随即的K个N的不同的序列 CreateRandomArray(N/D,K,CenterIndex);K; for(int j=0; Centeri.argj = datasetCenterIndexi.argj; /coutCenteri=i) centerIndexi=a; i-; void CopyCenter(struct DataSet* dataset) CenterCopyi=Centeri;void UpdateCluster(struct DataSet* dataset) int tindex; for(; Topi=0; ti
14、ndex=GetIndex(&dataseti,Center); /tindex是指dataseti属于第tindex个簇 AddtoCluster(tindex,i); /把dataseti加入到所属的簇当中 int GetIndex(struct DataSet* value,struct DataSet* center) int index=i; / double min=fabs(value-centeri); double min=Euclidean(value,¢eri); if(Euclidean(value,¢eri)argi-value2-argi)*(val
15、ue1-argi); temp = sqrt(sum);bool IsEqual(struct DataSet* value1,struct DataSet* value2) if(value1i.argj!=value2i.argj) return 0; return 1;void UpdateCenter(struct DataSet* dataset) double sum; for(int d=0;d0) Centeri.argd=sum/Topi;void print(struct DataSet* dataset) int i,j,d; ofstream fout(result.t
16、xt= fout第组:质心为: for(d=0; coutCenteri.argdt数据元素为:n /- /输入文件中 fout fout for(d=0;d+)datasetClusterij.argd / foutClusterij 总共用时:ttime 毫秒 fout.close();5.获取的模型的描述首先,准备数据,对数据进行预处理 ,选用合适的数据结构存储数据元组,然后设定参数,数据的总量N,维度D,聚类类别数量K,然后随机产生K个D维的数据作为质心,计算每个数据与质心距离,并加入所属的簇中,经多次迭代后,质心不变后,得到分类后的结果。6.实验运行结果和实验分析数据挖掘对处理后的数据采用k-means聚类算法,将聚类后的结果输入到文件中(图1),实验的结果:图1结果将数据元组分成了6类,按期每个分量的变化规律分别表示上文所说的6个类别。在文档最后输出聚类分析花费的时间(图2)是1762毫秒。图2由于初始化质心是随机的,所以每次运行聚类分析花费的时间略有不同,本实验采用结构体来存储数据,聚类的操作多应用指针来实现,在选择所属的簇,并加入簇中,加入的是数据的索引值,提高了效率,在一步中如果使用指针指向数据可以进一步提高效率。总体上说算法的运行时间还是比较令人满意。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1