javaknn
① 你好,請問你現在有基於MapRece的knn演算法的java代碼么謝謝~
14/09/0308:08:01INFOjvm.JvmMetrics:=JobTracker,sessionId=
14/09/0308:08:01WARNmapred.JobClient:..
14/09/0308:08:01WARNmapred.JobClient:Nojobjarfileset.Userclassesmaynotbefound.SeeJobConf(Class)orJobConf#setJar(String).
14/09/0308:08:02INFOinput.FileInputFormat:Totalinputpathstoprocess:1
14/09/0308:08:02INFOmapred.JobClient:Runningjob:job_local_0001
14/09/0308:08:02INFOinput.FileInputFormat:Totalinputpathstoprocess:1
14/09/0308:08:02INFOmapred.MapTask:io.sort.mb=100
14/09/0308:08:03INFOmapred.MapTask:databuffer=79691776/99614720
14/09/0308:08:03INFOmapred.MapTask:recordbuffer=262144/327680
14/09/0308:08:03WARNmapred.LocalJobRunner:job_local_0001
java.lang.ClassCastException:classPoint2D
atjava.lang.Class.asSubclass(Class.java:3018)
atorg.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:599)
atorg.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:791)
atorg.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:524)
atorg.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:613)
atorg.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
atorg.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
14/09/0308:08:03INFOmapred.JobClient:map0%rece0%
14/09/0308:08:03INFOmapred.JobClient:Jobcomplete:job_local_0001
14/09/0308:08:03INFOmapred.JobClient:Counters:0
② 求KNN文本分類演算法java實現源代碼【散分了!!!!】
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
#define NATTRS 5 //number of attributes
#define MAXSZ 1700 //max size of training set
#define MAXVALUE 10000.0 //the biggest attribute's value is below 10000(int)
#define K 5
struct vector {
double attributes[NATTRS];
double classlabel;
};
struct item {
double distance;
double classlabel;
};
struct vector trSet[MAXSZ];//global variable,the training set
struct item knn[K];//global variable,the k-neareast-neighbour set
int curTSize = 0; //current size of the training set
int AddtoTSet(struct vector v)
{
if(curTSize>=MAXSZ) {
cout<<endl<<"The training set has "<<MAXSZ<<" examples!"<<endl<<endl;
return 0;
}
trSet[curTSize] = v;
curTSize++;
return 1;
}
double Distance(struct vector v1,struct vector v2)
{
double d = 0.0;
double tem = 0.0;
for(int i = 0;i < NATTRS;i++)
tem += (v1.attributes[i]-v2.attributes[i])*(v1.attributes[i]-v2.attributes[i]);
d = sqrt(tem);
return d;
}
int max(struct item knn[]) //return the no. of the item which has biggest distance(
//should be replaced)
{
int maxNo = 0;
if(K > 1)
for(int i = 1;i < K;i++)
if(knn[i].distance>knn[maxNo].distance)
maxNo = i;
return maxNo;
}double Classify(struct vector v)//decide which class label will be assigned to
//a given input vetor with the knn method
{
double dd = 0;
int maxn = 0;
int freq[K];
double mfreqC = 0;//the class label appears most frequently
int i;
for(i = 0;i < K;i++)
knn[i].distance = MAXVALUE;
for(i = 0;i < curTSize;i++)
{
dd = Distance(trSet[i],v);
maxn = max(knn);//for every new state of the training set should update maxn
if(dd < knn[maxn].distance) {
knn[maxn].distance = dd;
knn[maxn].classlabel = trSet[i].classlabel;
}
}
for(i = 0;i < K;i++)//freq[i] represents knn[i].classlabel appears how many times
freq[i] = 1;
for(i = 0;i < K;i++)
for(int j = 0;j < K;j++)
if((i!=j)&&(knn[i].classlabel == knn[j].classlabel))
freq[i]+=1;
int mfreq = 1;
mfreqC = knn[0].classlabel;
for(i = 0;i < K;i++)
if(freq[i] > mfreq) {
mfreq = freq[i];//mfreq represents the most frepuences
mfreqC = knn[i].classlabel; //mfreqNo is the item no. with the most frequent
//classlabel
}
return mfreqC;
}
void main()
{ double classlabel;
double c;
double n;
struct vector trExmp;
int i;
ifstream filein("G:\\data\\for knn\\data.txt");
if(filein.fail()){cout<<"Can't open data.txt"<<endl; return;}
while(!filein.eof()) {
filein>>c;
trExmp.classlabel = c;
cout<<trExmp.classlabel<<" "; for(int i = 0;i < NATTRS;i++) {
filein>>n;
trExmp.attributes[i] = n;
cout<<trExmp.attributes[i]<<" ";
} cout<<endl;
if(!AddtoTSet(trExmp))
break;
}filein.close();struct vector testv={{142,188,11,1159,0.5513196},17};
classlabel = Classify(testv);
cout<<"The classlable of the testv is: ";
cout<<classlabel<<endl;
for(i = 0;i < K;i++)
cout<<knn[i].distance<<"\t"<<knn[i].classlabel<<endl;
//cout<<max(knn);
}
③ 學習java後,可以從事一些什麼職業,以及這些職業具體做些什麼。
相關閱讀:
零基礎學習編程應該選擇什麼樣的方向來深入學習
1、IT技術方向劃分
首先是IT技術方向,我覺得這樣劃分更合理一點:移動開發方向、後台方向、游戲開發方向、演算法/研究方向。
因為互聯網行業後端伺服器一般都是Linux,所以web後台開發和Linux伺服器開發可視為是一個方向(除非你指的Linux伺服器開發是系統架構師,不過那是運維的工作,應該不算做開發吧)。
還有就是游戲開發以C++為主卻不僅限於C++,雖然很多大型游戲都是C++開發的,比如現在的手游也有Android、IOS的開發的,還有些游戲開發會用新的技術(如比較有名的Unity,可能在大學都還接觸不到)。資料庫基本上都是架構師和程序員一起的設計的。
2、IT行業的發展趨勢
移動端(手機操作系統)是一個變化最快的領域,也存在很大的變數。10年之前,在諾基亞風靡全球的時候,你會想到Android有現在這么大的前景這么多的用戶量嗎?2010年開始(其實08年就開始醞釀了),Android迅速崛起,發展異常的兇猛,到2012年幾乎人手一台Android設備了,與此同時諾基亞卻一路下滑,直至跌到低谷再也爬不起來的,後來投入微軟的懷抱也發展的不太順利,已經是大勢已去。而蘋果從2007年第一代iPhone誕生的時候開始,走的就是高大上的路線,主要針對的是高端人群,價格是所有手機中最高的,但技術也是最牛逼的,體驗是最友好的,以至於每一次的發布會排隊的人都濟到爆!
互聯網我認為IT領域未來的發展方向,從實體方面來看一定是智能設備和物聯網,從領域來看一定是互聯網+,未來的網路將會越來越智能。
互聯網是網路與網路,網路與人的連接;而物聯網就是物體與網路,人與網路的連接。阿里巴巴的投資人孫正義在互聯網大會上說過:「今天每個人大概會有兩個移動設備,2020年的時候,每個人連接的設備的數量會達到一千個」。未來將會是周圍都是物體,而物體都與網路連接,也就是周圍都是物體,周圍都是網路。而且物體將會越來越智能,智能家居應該會發展起來,比如你一回家,空調就開了,電燈就亮了;一出門空調和電燈就關了,還提醒你今天的天氣狀況…… 現在已經有很多物聯網慢慢發展起來了。
游戲我本人不怎麼玩游戲,對游戲不太了解!但從整個社會發展來看,世界在不斷發展,中國也日益強大,隨著經濟水平的不斷提高,人們有更多的時間用來悠閑娛樂,也有更好的物質基礎。在這種趨勢下,玩游戲的人應該會越來越多,游戲行業應該會越來越景氣。
3、技術方向的前景
根據以上的分析,互聯網將會應用的越來越廣泛,web前端、web後台方面、移動開發的人才在未來的三五年內應該都是緊需的人才。隨著大數據時代的到來,演算法/研究方向的高端人才將變得及為緊缺。
4、技術的學習
我曾經做過阿里和網路的校招筆試題,Java研發工程師的筆試題要求的計算機語言主要以Java為主,會有少量的C++題,程序設計的題目一般可以在Java、C++等語言中任選一種。題目的類型的話,你提到的數據結構與演算法、資料庫、操作系統、計算機網路等都會有。演算法工程師職位的筆試題語言主要以C++為主,類型會有什麼KNN啊、隱馬爾可夫啊、最短距離等很難的演算法。
Java的筆試題會有部分C++的題目,我想可能是有這么兩個原因吧:
考查你的學習態度是否認真努力,因為C++是幾乎是所有大學里計算機相關專業學生的必需課;
考查你對計算機語言底層的一些認識,對基礎的掌握程度,比如:如果你熟悉C++,就會知道數組在內存中其實就是一塊連續的內存段。
如果你想做Java後台開發的話,就以Java web技術的學習為主,C++基礎還是有必要掌握的。
5、方向的選擇
至於技術方向的選擇,我覺得不管做什麼選擇,都應該以興趣為主,跟著自己的心走!這樣才不會留下遺憾。這樣還無法做出選擇的話,就跟著直覺走吧! 我覺得在對事件一無所知的情況下,直覺是0.5自我意識+0.5天意
④ knn演算法算是一種python模型嗎
「演算法」不能算是「模型」,更不能說是「python模型」,因為python能實現的,c++、java等通用語言也能實現。
⑤ 你好,關於KNN演算法的maprece化
==================cluster.txt===========================
A 2 2
B 2 4
C 4 2
D 4 4
E 6 6
F 6 8
G 8 6
H 8 8
==================cluster.center.conf===========================
K1 3 2
K2 6 2
====================================================================================
package com.mahout.cluster;
//二維坐標的點
public class DmRecord {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private double xpodouble;
private double ypodouble;
public DmRecord(){
}
public DmRecord(String name,double x,double y){
this.name = name;
this.xpodouble = x;
this.ypodouble = y;
}
public double getXpoint() {
return xpodouble;
}
public void setXpoint(double xpodouble) {
this.xpodouble = xpodouble;
}
public double getYpoint() {
return ypodouble;
}
public void setYpoint(double ypodouble) {
this.ypodouble = ypodouble;
}
public double distance(DmRecord record){
return Math.sqrt(Math.pow(this.xpodouble-record.xpodouble, 2)+Math.pow(this.ypodouble-record.ypodouble, 2));
}
}
==============================================================================
package com.mahout.cluster;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.io.IOUtils;
public class DmRecordParser {
private Map<String,DmRecord> urlMap = new HashMap<String,DmRecord>();
/**
* 讀取配置文件記錄,生成對象
*/
public void initialize(File file) throws IOException {
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line;
while ((line = in.readLine()) != null) {
String [] strKey = line.split("\t");
urlMap.put(strKey[0],parse(line));
}
} finally {
IOUtils.closeStream(in);
}
}
/**
* 生成坐標對象
*/
public DmRecord parse(String line){
String [] strPlate = line.split("\t");
DmRecord Dmurl = new DmRecord(strPlate[0],Integer.parseInt(strPlate[1]),Integer.parseInt(strPlate[2]));
return Dmurl;
}
/**
* 獲取分類中心坐標
*/
public DmRecord getUrlCode(String cluster){
DmRecord returnCode = null;
DmRecord dmUrl = (DmRecord)urlMap.get(cluster);
if(dmUrl == null){
//35 6
returnCode = null;
}else{
returnCode =dmUrl;
}
return returnCode;
}
}
==============================================================================
package com.mahout.cluster;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Recer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import com.mahout.test.StringStringPairAsce;
public class Kmeans extends Configured implements Tool {
public static class KmeansMapper extends MapReceBase implements
Mapper<LongWritable, Text, Text, Text> {
private DmRecordParser drp ;
private String clusterNode = "K";
private DmRecord record0 = null;
private DmRecord record1 = new DmRecord();
private double Min_distance = 9999;
private int tmpK = 0;
private Text tKey = new Text();
private Text tValue = new Text();
//獲取聚類中心坐標
@Override
public void configure(JobConf conf) {
drp = new DmRecordParser();
try {
drp.initialize(new File("cluster.center.conf"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
//根據聚類坐標,把文件中的點進行類別劃分
@Override
public void map(LongWritable key, Text value,
OutputCollector<Text, Text> output, Reporter arg3)
throws IOException {
String [] strArr = value.toString().split("\t");
for(int i=1; i <= 2; i++){
record0 = drp.getUrlCode("K"+i);
record1.setName(strArr[0]);
record1.setXpoint(Double.parseDouble(strArr[1]));
record1.setXpoint(Integer.parseInt(strArr[2]));
if(record0.distance(record1) < Min_distance){
tmpK = i;
Min_distance = record0.distance(record1);
}
}
tKey.set("C"+tmpK);
output.collect(tKey, value);
}
}
//計算新的聚類中心
public static class KmeansRecer extends MapReceBase implements
Recer<Text, Text, Text, Text> {
private Text tKey = new Text();
private Text tValue = new Text();
@Override
public void rece(Text key, Iterator<Text> value,
OutputCollector<Text, Text> output, Reporter arg3)
throws IOException {
double avgX=0;
double avgY=0;
double sumX=0;
double sumY=0;
int count=0;
String [] strValue = null;
while(value.hasNext()){
count++;
strValue = value.next().toString().split("\t");
sumX = sumX + Integer.parseInt(strValue[1]);
sumY = sumY + Integer.parseInt(strValue[1]);
}
avgX = sumX/count;
avgY = sumY/count;
tKey.set("K"+key.toString().substring(1,2));
tValue.set(avgX + "\t" + avgY);
System.out.println("K"+key.toString().substring(1,2)+"\t"+avgX + "\t" + avgY);
output.collect(tKey, tValue);
}
}
@Override
public int run(String[] args) throws Exception {
JobConf conf = new JobConf(getConf(), Kmeans.class);
conf.setJobName("Kmeans");
//conf.setNumMapTasks(200);
// 設置Map輸出的key和value的類型
conf.setMapOutputKeyClass(Text.class);
conf.setMapOutputValueClass(Text.class);
// 設置Rece輸出的key和value的類型
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(Text.class);
// 設置Mapper和Recer
conf.setMapperClass(KmeansMapper.class);
conf.setRecerClass(KmeansRecer.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
// 設置輸入輸出目錄
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
return 0;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new Kmeans(), args);
System.exit(exitCode);
}
}
⑥ 如何用java做用戶行為分析用什麼演算法
據我所知,java好像對大數據分析方面沒有什麼現成的方法或包可以調用。
現在做數據分析(機器學習)用的比較多的是Python和R還有Matlib;
//如果是簡單的匯總分析,分類,回歸的話,excel就足夠了。java使用資料庫也可以完成。
其中Python算比較簡單的,有現成的科學計算工具和非常活躍的社區。
常用的演算法:回歸分析,支持向量機(SVM),決策樹,K-近鄰(KNN),K-均值(k-means)。。。還有比較火的深度學習(DL)。可以了解一下。
⑦ java軟體工程師要掌握哪些基礎知識
ajax
js
sql
這些在加上你已學的,你可以當JAVA程序員了,要做JAVA工程師的話;
JAVA的常用API
JAVA異常處理機制
JAVA回收機制
多線程
最好是了解一些基礎演算法如:(KNN,SVM,網路神經模型等對你求職會有很大幫助)
以上只是一部分,還有很多,總之一句話,學無止境。
建議你別等學好了才去做,要在做中去學。
⑧ java 分類器演算法問題!!急。。。。
判斷一個次的極性是要根據它的屬性來判斷的,所以你要先確定用那些屬性來表示一個詞,一條記錄包括對詞描述的屬性和一般屬性(詞的長度,包括的音標,後綴,詞根等)和分類屬性(正面和負面的),這樣才能形成一個數據集,提供給演算法進行分類,所以第一步是形成數據集。
然後可以有特徵選擇之類的預處理步驟,再根據分類演算法進行分類(分類的演算法網路上都有代碼,自己找下),用演算法的模型對要分類的詞進行分類,最後做個界面什麼的,好看點。
演算法的話很多啊,象決策樹,kNN之類的就比較簡單,你是做本科畢業設計嗎?如果是的話,反正要求不高,演算法不重要,找現成的代碼就行。
可以找些資料看,知道分類是怎麼回事就好。svm要證明的話需要數學功底,只是要用的話,呵呵,就下現成代碼好了。
不知道你是不是要問這個,希望能幫到你。
⑨ 一個Java開發的項目,有什麼數據挖掘工具可以整合到平台中,進而可以將挖掘結果展示到頁面中
很多數據挖掘方法都有相應的jar包的,可以去查一些簡單的分類knn聚類kmeans等等方法。